配列を保持するフィールドにインデックスを作成したいと考えています。デフォルトでは、そのようなフィールドにインデックスが作成されると、mongo はすべての配列の各項目に個別にインデックスを付けます。
ただし、代わりに、サブドキュメント フィールドのインデックスと同様に、インデックスを複合インデックスにする必要があります (インデックスを一意にし['a', 'b']
、['b', 'a']
. モノゴでこれを行う方法はありますか?
これを行うには、次のようにデータを保存します。
{
field: { v: [ a, "b" ] }
}
そして、次のインデックスを作成します。
db.collection.ensureIndex( { field: 1 } );
少し直感に反することはわかっていますが、「フィールド」のインデックスはインデックス値として使用されます。
v: [ a, "b" ]
そして、それぞれのaと「b」が個別にではありません。もちろん、「v」には別のものを使用できますが、field の値が配列ではなくドキュメントであることが重要です。
クエリ:
db.collection.find( { field: { v: [ 'a', 'b' ] } } )
次に、インデックスを喜んで使用します。
{
"cursor" : "BtreeCursor field_1",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 1,
"nscanned" : 1,
"nscannedObjectsAllPlans" : 1,
"nscannedAllPlans" : 1,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"field" : [
[
{
"v" : [ "a", "b" ]
},
{
"v" : [ "a", "b" ]
}
]
]
},
"server" : "whisky:27017"
}