Mongodb-advanced-indexing
提供:Dev Guides
MongoDB-高度なインデックス作成
- ユーザー*コレクションの次のドキュメントを考慮してください-
{
"address": {
"city": "Los Angeles",
"state": "California",
"pincode": "123"
},
"tags": [
"music",
"cricket",
"blogs"
],
"name": "Tom Benzamin"
}
上記のドキュメントには、* addressサブドキュメント*と* tags配列*が含まれています。
配列フィールドのインデックス付け
ユーザーのタグに基づいてユーザードキュメントを検索するとします。 このために、コレクション内のタグ配列にインデックスを作成します。
配列にインデックスを作成すると、フィールドごとに個別のインデックスエントリが作成されます。 したがって、この場合、タグ配列にインデックスを作成すると、音楽、クリケット、ブログの値に対して個別のインデックスが作成されます。
タグ配列にインデックスを作成するには、次のコードを使用します-
>db.users.ensureIndex({"tags":1})
インデックスを作成した後、次のようにコレクションのタグフィールドを検索できます-
>db.users.find({tags:"cricket"})
適切なインデックスが使用されていることを確認するには、次の explain コマンドを使用します-
>db.users.find({tags:"cricket"}).explain()
上記のコマンドの結果、「cursor」:「BtreeCursor tags_1」となり、適切なインデックスが使用されていることが確認されます。
サブドキュメントフィールドのインデックス作成
都市、州、およびPINコードのフィールドに基づいてドキュメントを検索するとします。 これらのフィールドはすべて住所サブ文書フィールドの一部であるため、サブ文書のすべてのフィールドにインデックスを作成します。
サブ文書の3つのフィールドすべてにインデックスを作成するには、次のコードを使用します-
>db.users.ensureIndex({"address.city":1,"address.state":1,"address.pincode":1})
インデックスが作成されると、次のようにこのインデックスを利用してサブドキュメントフィールドを検索できます-
>db.users.find({"address.city":"Los Angeles"})
クエリ式は、指定されたインデックスの順序に従う必要があることに注意してください。 したがって、上記で作成されたインデックスは、次のクエリをサポートします-
>db.users.find({"address.city":"Los Angeles","address.state":"California"})
また、次のクエリをサポートします-
>db.users.find({"address.city":"LosAngeles","address.state":"California",
"address.pincode":"123"})