Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

配列フィールドに対するインデックスの作成

項目一覧

  • このタスクについて
  • 手順
  • 結果
  • 詳細

配列値を含むフィールドにインデックスを作成すると、そのフィールドに対するクエリのパフォーマンスが向上します。 配列値を含むフィールドにインデックスを作成すると、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 ]
}
]

戻る

Multikey