0

我在 mongodb 中有一个文档,其中包含这样的地图:

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

如果我在这样的属性上创建索引:

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

索引会是什么样子,什么类型的查询会使用这个索引?

4

2 回答 2

1

这仍然是与副本相同的基本问题。索引attributes将作为二进制 blob 完成,因此它只能用于以下查询:

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

所以它不能用于对 的单个键的查询attributes,只能用于整个对象的查询。

于 2013-03-08T19:33:04.017 回答
1

您提到的设置会将“属性”索引为 blob,并且不会用于任何需要检查实际属性文档中的值的查询。如果您希望能够执行类似的查询

{ "attributes.key1" : "value1" }

并让它使用索引,然后您可以构建文档

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

然后,根据您需要做什么,索引“属性”本身,或者在“attributes.key”和“attributes.value”上创建一个复合索引。

于 2013-03-08T19:43:45.363 回答