mongodb索引的使用取决于符号

时间:2012-11-16 12:31:59

标签: mongodb indexing

说我在集合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"

2 个答案:

答案 0 :(得分:2)

这两个问题意味着两件事。

首先是:“找到_id正好是对象{orgUnit: 1039}”的文档。 第二个是:“找到_idorgUnit属性等于1039的对象的文档。

因此,第二个查询较弱,并且还会匹配{_id: {foo: "bar", orgUnit: 1039}}等文档,而第一个查询则不会。 Mongo无法使用_id上的索引来执行第二次查询。

答案 1 :(得分:2)

您需要在'_id.orgUnit'上创建单独的索引,以使用点表示法有效地在该字段上进行查询。

db.A.ensureIndex({'_id.orgUnit': 1})