0

说我_id在集合 A 上有化合物:

{
    _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"

4

2 回答 2

2

这两个查询意味着两个不同的东西。

第一个是这样的:“找到我的文档,其_id恰好是一个对象{orgUnit: 1039}”。第二个就像:“给我找一个属性等于 1039_id的对象的文档”。orgUnit

所以第二个查询比较弱,并且也会匹配文档,{_id: {foo: "bar", orgUnit: 1039}}而第一个查询不会。Mongo 不能使用 index on_id来执行第二个查询。

于 2012-11-16T13:40:33.033 回答
2

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

db.A.ensureIndex({'_id.orgUnit': 1})
于 2012-11-16T14:42:55.713 回答