Mongodb-indexing

提供:Dev Guides
移動先:案内検索

MongoDB-インデックス作成

インデックスは、クエリの効率的な解決をサポートします。 インデックスがない場合、MongoDBはコレクションのすべてのドキュメントをスキャンして、クエリステートメントに一致するドキュメントを選択する必要があります。 このスキャンは非常に非効率的であり、MongoDBが大量のデータを処理する必要があります。

インデックスは特別なデータ構造で、データセットのごく一部を走査しやすい形式で保存します。 インデックスは、特定のフィールドまたはフィールドのセットの値を、インデックスで指定されたフィールドの値の順に格納します。

createIndex()メソッド

インデックスを作成するには、MongoDBのcreateIndex()メソッドを使用する必要があります。

構文

  • createIndex()*メソッドの基本的な構文は、次のとおりです()。
>db.COLLECTION_NAME.createIndex({KEY:1})

ここで、キーはインデックスを作成するフィールドの名前で、1は昇順です。 降順でインデックスを作成するには、-1を使用する必要があります。

>db.mycol.createIndex({"title":1})
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}
>
  • createIndex()*メソッドでは、複数のフィールドを渡して、複数のフィールドにインデックスを作成できます。
>db.mycol.createIndex({"title":1,"description":-1})
>

このメソッドは、オプションのリストも受け入れます(オプション)。 以下はリストです-

パラメータ

Type

説明

バックグラウンド

ブール値

インデックスを作成しても他のデータベースアクティビティがブロックされないように、インデックスをバックグラウンドで作成します。 バックグラウンドでビルドするには、trueを指定します。 デフォルト値は false です。

独特の

ブール値

一意のインデックスを作成して、コレクションが、インデックスキーがインデックス内の既存の値と一致するドキュメントの挿入を受け入れないようにします。 一意のインデックスを作成するには、trueを指定します。 デフォルト値は false です。

name

ひも

インデックスの名前。 指定しない場合、MongoDBはインデックス付きフィールドの名前とソート順を連結してインデックス名を生成します。

まばらな

ブール値

trueの場合、インデックスは指定されたフィールドを持つドキュメントのみを参照します。 これらのインデックスは使用するスペースが少なくなりますが、状況によっては動作が異なります(特にソート)。 デフォルト値は false です。

expireAfterSeconds

整数

MongoDBがこのコレクション内のドキュメントを保持する期間を制御するTTLとして値を秒単位で指定します。

重み

資料

重みは1から99,999の範囲の数値であり、スコアに関して他のインデックス付きフィールドに対するフィールドの重要度を示します。

既定の言語

ひも

テキストインデックスの場合、ストップワードのリストを決定する言語と、ステマーおよびトークナイザーのルール。 デフォルト値は English です。

language_override

ひも

テキストインデックスの場合、デフォルトの言語を上書きする言語を含むドキュメントのフィールドの名前を指定します。 デフォルト値は言語です。

dropIndex()メソッド

MongoDBのdropIndex()メソッドを使用して、特定のインデックスを削除できます。

構文

DropIndex()メソッドの基本的な構文は次のとおりです()。

>db.COLLECTION_NAME.dropIndex({KEY:1})

ここで、keyはインデックスを作成するファイルの名前で、1は昇順です。 降順でインデックスを作成するには、-1を使用する必要があります。

> db.mycol.dropIndex({"title":1})
{
    "ok" : 0,
    "errmsg" : "can't find index with key: { title: 1.0 }",
    "code" : 27,
    "codeName" : "IndexNotFound"
}

dropIndexes()メソッド

このメソッドは、コレクションの複数の(指定された)インデックスを削除します。

構文

DropIndexes()メソッドの基本的な構文は次のとおりです()-

>db.COLLECTION_NAME.dropIndexes()

以下に示すように、名前付きのmycolコレクションに2つのインデックスを作成したと仮定します-

> db.mycol.createIndex({"title":1,"description":-1})

次の例では、上記で作成したmycolのインデックスを削除します-

>db.mycol.dropIndexes({"title":1,"description":-1})
{ "nIndexesWas" : 2, "ok" : 1 }
>

getIndexes()メソッド

このメソッドは、コレクション内のすべてのインデックスの説明を返します。

構文

以下は、getIndexes()メソッドの基本的な構文です-

db.COLLECTION_NAME.getIndexes()

以下に示すように、名前付きのmycolコレクションに2つのインデックスを作成したと仮定します-

> db.mycol.createIndex({"title":1,"description":-1})

次の例は、コレクションmycolのすべてのインデックスを取得します-

> db.mycol.getIndexes()
[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.mycol"
    },
    {
        "v" : 2,
        "key" : {
            "title" : 1,
            "description" : -1
        },
        "name" : "title_1_description_-1",
        "ns" : "test.mycol"
    }
]
>