配列値を含むフィールドにインデックスを作成すると、そのフィールドに対するクエリのパフォーマンスが向上します。 配列値を含むフィールドにインデックスを作成すると、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 ] } ]
詳細
埋め込みドキュメント フィールドにマルチキー インデックスを作成する方法については、「配列内の埋め込みフィールドにインデックスを作成する 」を参照してください。
マルチキー インデックスの限界の詳細については、「 マルチキー インデックスの限界 」を参照してください。