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})
>

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

パラメータ タイプ 説明
バックグラウンド ブール値 インデックスを作成しても他のデータベースアクティビティがブロックされないように、バックグラウンドでインデックスを作成します。バックグラウンドでビルドするにはtrueを指定します。デフォルト値はfalse
ユニーク ブール値 一意のインデックスを作成して、インデックスキーがインデックス内の既存の値と一致するドキュメントの挿入をコレクションが受け入れないようにします。trueを指定して、一意のインデックスを作成します。デフォルト値はfalse
名前 ストリング インデックスの名前。指定されていない場合、MongoDBは、インデックス付きフィールドの名前と並べ替え順序を連結してインデックス名を生成します。
スパース ブール値 trueの場合、インデックスは指定されたフィールドを持つドキュメントのみを参照します。これらのインデックスは使用するスペースが少なくなりますが、状況によっては動作が異なります(特にソート)。デフォルト値はfalse
expireAfterSeconds 整数 MongoDBがこのコレクション内のドキュメントを保持する期間を制御するTTLとして、値を秒単位で指定します。
重み 資料 重みは1から99,999の範囲の数値であり、スコアの観点から、他のインデックス付きフィールドと比較したフィールドの重要性を示します。
既定の言語 ストリング テキストインデックスの場合、ストップワードのリストとステマーおよびトークナイザーのルールを決定する言語。デフォルト値はEnglish
language_override ストリング テキストインデックスの場合、デフォルト言語を上書きする言語を含むドキュメント内のフィールドの名前を指定します。デフォルト値は言語です。

dropIndex()メソッド

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

構文

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

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

ここで、キーはインデックスを作成するファイルの名前であり、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"
	}
]
>