0

次のようなマップを含む mongodb にドキュメントがあります。

{
     "name": "Document 1",
     "attrinutes": {
           "key1": "value1",
           "key2": "value2",
           "key3": "value3"
     }
}

次のような属性にインデックスを作成すると:

db.ensureIndex ({"attributes":-1})

インデックスはどのように表示され、どのタイプのクエリでこのインデックスが使用されるでしょうか?

4

2 に答える 2

1

あなたが言及したセットアップは、「属性」をブロブとしてインデックス化し、実際の属性ドキュメント内の値を検査する必要があるクエリには使用されません。次のようなクエリと同等のことができるようにしたい場合

{ "attributes.key1" : "value1" }

インデックスを使用するようにすると、ドキュメントを構造化できます

{
    "name" : "Document1",
    "attributes" [
        { "key" : "key1", "value", "value1" },
        { "key" : "key2", "value", "value2" }
    ]
}

次に、必要に応じて、「attributes」自体にインデックスを付けるか、「attributes.key」と「attributes.value」に複合インデックスを作成します。

于 2013-03-08T19:43:45.363 に答える
1

複製と同じ基本的な質問です。のインデックスattributesはバイナリ BLOB として実行されるため、次のようなクエリにのみ使用できます。

db.coll.find({attributes: {key1: 'value1', key2: 'value2', key3: 'value3'}})

したがって、 の個々のキーに対するクエリには使用できずattributes、オブジェクト全体に対してのみ使用できます。

于 2013-03-08T19:33:04.017 に答える