MongoDB の高度なインデックス作成
次のドキュメント コレクション (ユーザー) を考えてみましょう:
{ "address": { "city": "Los Angeles", "state": "California", "pincode": "123" }, "tags": [ "music", "cricket", "blogs" ], "name": "Tom Benzamin" }
上記のドキュメントには、アドレス サブドキュメントとタグ配列が含まれています。
配列フィールドのインデックス付け
タグに基づいてユーザーを取得しているとします。そのためには、コレクション内の配列タグにインデックスを付ける必要があります。
配列にインデックスを作成するには、配列内の各フィールドに順番にインデックスを付ける必要があります。したがって、配列タグのインデックスを作成するときは、音楽、クリケット、ブログの 3 つの値に対して個別のインデックスを作成します。
次のコマンドを使用して配列インデックスを作成します:
>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"})