配列フィールドに対するインデックスの作成
配列値を含むフィールドにインデックスを作成すると、そのフィールドに対するクエリのパフォーマンスが向上します。 配列値を含むフィールドにインデックスを作成すると、MongoDB はそのインデックスをマルチキー インデックスとして保存します。
インデックスを作成するには、 db.collection.createIndex()
メソッドを使用します。 操作は次のプロトタイプのようになります。
db.<collection>.createIndex( { <field>: <sortOrder> } )
このタスクについて
このページの例では、次のドキュメントを含むstudents
コレクションを使用しています。
db.students.insertMany( [ { "name": "Andre Robinson", "test_scores": [ 88, 97 ] }, { "name": "Wei Zhang", "test_scores": [ 62, 73 ] }, { "name": "Jacob Meyer", "test_scores": [ 92, 89 ] } ] )
少なくとも 1test_score
つの が90
より大きい学生を返すクエリを定期的に実行します。このクエリのパフォーマンスを向上させるには、 test_scores
フィールドにインデックスを作成します。
手順
次の操作では、 students
コレクションのtest_scores
フィールドに昇順のマルチキー インデックスが作成されます。
db.students.createIndex( { test_scores: 1 } )
test_scores
には配列値が含まれているため、MongoDB はこのインデックスをマルチキー インデックスとして保存します。
結果
インデックスには、 test_scores
フィールドに表示される個々の値のキーが含まれています。 インデックスは昇順であり、キーが次の順序で保存されることを意味します: [ 62, 73, 88, 89, 92, 97 ]
。
インデックスは、 test_scores
フィールドで を選択するクエリをサポートしています。 たとえば、次のクエリは、 test_scores
配列内の少なくとも 1 つの要素が 90 より大きいドキュメントを返します。
db.students.find( { test_scores: { $elemMatch: { $gt: 90 } } } )
出力:
[ { _id: ObjectId("632240a20646eaee87a56a80"), name: 'Andre Robinson', test_scores: [ 88, 97 ] }, { _id: ObjectId("632240a20646eaee87a56a82"), name: 'Jacob Meyer', test_scores: [ 92, 89 ] } ]
詳細
埋め込みドキュメント フィールドにマルチキー インデックスを作成する方法については、「配列内の埋め込みフィールドにインデックスを作成する 」を参照してください。
マルチキー インデックスの限界の詳細については、「 マルチキー インデックスの限界 」を参照してください。