配列内の埋め込みフィールドにインデックスを作成
配列内の埋め込みドキュメント フィールドにインデックスを作成できます。 これらのインデックスにより、配列に表示される特定の埋め込みフィールドに対するクエリのパフォーマンスが向上します。 配列内のフィールドにインデックスを作成すると、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
配列内の要素のquantity
が5
より小さいドキュメントをクエリします。 このクエリのパフォーマンスを向上させるには、 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 つの要素のquantity
が5
より小さいドキュメントを返します。
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 は、最も値が高い要素が先頭にあるフィールドに基づいて降順でソートします。