2

配列を保持するフィールドにインデックスを作成したいと考えています。デフォルトでは、そのようなフィールドにインデックスが作成されると、mongo はすべての配列の各項目に個別にインデックスを付けます。

ただし、代わりに、サブドキュメント フィールドのインデックスと同様に、インデックスを複合インデックスにする必要があります (インデックスを一意にし['a', 'b']['b', 'a']. モノゴでこれを行う方法はありますか?

4

2 に答える 2

0

これを行うには、次のようにデータを保存します。

{ 
    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"
}
于 2013-07-15T17:38:06.130 に答える