我在mongodb中有一个文档,其中包含这样的地图:
{
"name": "Document 1",
"attrinutes": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
}
如果我在这样的属性上创建索引:
db.ensureIndex ({"attributes":-1})
索引会是什么样的,以及使用此索引的查询类型是什么?
答案 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”上创建复合索引。