如果您在mongodb中索引地图会发生什么

时间:2013-03-08 18:53:36

标签: mongodb

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

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

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

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

索引会是什么样的,以及使用此索引的查询类型是什么?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

的查询
{ "attributes.key1" : "value1" }

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

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

然后,根据您需要做的事情,索引“属性”本身,或在“attributes.key”和“attributes.value”上创建复合索引。