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

配列内の埋め込みフィールドにインデックスを作成

項目一覧

  • このタスクについて
  • 手順
  • 結果
  • 結果を並べ替える
  • 詳細

配列内の埋め込みドキュメント フィールドにインデックスを作成できます。 これらのインデックスにより、配列に表示される特定の埋め込みフィールドに対するクエリのパフォーマンスが向上します。 配列内のフィールドにインデックスを作成すると、MongoDB はそのインデックスをマルチキー インデックスとして保存します。

インデックスを作成するには、 db.collection.createIndex()メソッドを使用します。 操作は次のプロトタイプのようになります。

db.<collection>.createIndex( { <field>: <sortOrder> } )

このページの例では、次のドキュメントを含むinventoryコレクションを使用しています。

db.inventory.insertMany( [
{
"item": "t-shirt",
"stock": [
{
"size": "small",
"quantity": 8
},
{
"size": "large",
"quantity": 10
},
]
},
{
"item": "sweater",
"stock": [
{
"size": "small",
"quantity": 4
},
{
"size": "large",
"quantity": 7
},
]
},
{
"item": "vest",
"stock": [
{
"size": "small",
"quantity": 6
},
{
"size": "large",
"quantity": 1
}
]
}
] )

在庫アイテムの在庫が 5 つ未満の場合は、追加の在庫を注文する必要があります。 並べ替えるアイテムを見つけるには、 stock配列内の要素のquantity5より小さいドキュメントをクエリします。 このクエリのパフォーマンスを向上させるには、 stock.quantityフィールドにインデックスを作成します。

次の操作では、 inventoryコレクションのstock.quantityフィールドに昇順のマルチキー インデックスが作成されます。

db.inventory.createIndex( { "stock.quantity": 1 } )

stockには配列値が含まれているため、MongoDB はこのインデックスをマルチキー インデックスとして保存します。

インデックスには、 stock.quantityフィールドに表示される個々の値のキーが含まれています。 インデックスは昇順であり、キーが次の順序で保存されることを意味します: [ 1, 4, 6, 7, 8, 10 ]

インデックスは、 stock.quantityフィールドで を選択するクエリをサポートしています。 たとえば、次のクエリは、 stock配列内の少なくとも 1 つの要素のquantity5より小さいドキュメントを返します。

db.inventory.find(
{
"stock.quantity": { $lt: 5 }
}
)

出力:

[
{
_id: ObjectId("63449793b1fac2ee2e957ef3"),
item: 'vest',
stock: [ { size: 'small', quantity: 6 }, { size: 'large', quantity: 1 } ]
},
{
_id: ObjectId("63449793b1fac2ee2e957ef2"),
item: 'sweater',
stock: [ { size: 'small', quantity: 4 }, { size: 'large', quantity: 7 } ]
}
]

このインデックスは、次のクエリなど、 stock.quantityフィールドでのソート操作もサポートしています。

db.inventory.find().sort( { "stock.quantity": -1 } )

出力:

[
{
_id: ObjectId("63449793b1fac2ee2e957ef1"),
item: 't-shirt',
stock: [ { size: 'small', quantity: 8 }, { size: 'large', quantity: 10 } ]
},
{
_id: ObjectId("63449793b1fac2ee2e957ef2"),
item: 'sweater',
stock: [ { size: 'small', quantity: 4 }, { size: 'large', quantity: 7 } ]
},
{
_id: ObjectId("63449793b1fac2ee2e957ef3"),
item: 'vest',
stock: [ { size: 'small', quantity: 6 }, { size: 'large', quantity: 1 } ]
}
]

オブジェクトの配列をソートする場合、MongoDB は、最も値が高い要素が先頭にあるフィールドに基づいて降順でソートします。

戻る

配列フィールドでの作成