说我在集合A上有化合物_id
:
{
_id:{
orgUnit:Int64
...
}
}
查询此类节目使用了索引:
db.A.find({_id:{orgUnit:1039}}).explain()
...
"indexBounds" : {
"start" : {
"_id" : {
"orgUnit" : 1039
}
},
"end" : {
"_id" : {
"orgUnit" : 1039
}
}
但是当我将查询更改为“点符号”时,表明查询变得简单。
db.A.find({"_id.orgUnit":1039}).explain()
...
"indexBounds" : {
},
点符号有什么问题?主要:如何利用索引来允许我找到"_id.orgUnit"
答案 0 :(得分:2)
这两个问题意味着两件事。
首先是:“找到_id
正好是对象{orgUnit: 1039}
”的文档。
第二个是:“找到_id
是orgUnit
属性等于1039的对象的文档。
因此,第二个查询较弱,并且还会匹配{_id: {foo: "bar", orgUnit: 1039}}
等文档,而第一个查询则不会。 Mongo无法使用_id
上的索引来执行第二次查询。
答案 1 :(得分:2)
您需要在'_id.orgUnit'
上创建单独的索引,以使用点表示法有效地在该字段上进行查询。
db.A.ensureIndex({'_id.orgUnit': 1})