MongoDB:带有子文档索引的覆盖查询

时间:2016-07-07 07:46:44

标签: mongodb nosql

输入

我有这样的文件集合:

{_id: {d: 1, t: 1}, ...}
{_id: {d: 1, t: 2}, ...}
{_id: {d: 2, t: 1}, ...}
...

问题

我尝试使用以下查询选择_id的所有_id.d = 2值:

db.coll.find({_id: {$gte: {d: 2}, $lt: {d: 3}}}, {_id: 1})

(请注意,我并未在查询中直接引用_id.d

但由于我们将IXSCAN作为FETCH的后代,因此这个查询似乎没有被涵盖:

"inputStage" : {
    "stage" : "FETCH",
    "filter" : {
            "$and" : [
                    {
                            "_id" : {
                                    "$lt" : {
                                            "d" : 1210
                                    }
                            }
                    },
                    {
                            "_id" : {
                                    "$gte" : {
                                            "d" : 1209
                                    }
                            }
                    }
            ]
    },
    "inputStage" : {
            "stage" : "IXSCAN",
            "keyPattern" : {
                    "_id" : 1
            },
            "indexName" : "_id_",
            "isMultiKey" : false,
            "direction" : "forward",
            "indexBounds" : {
                    "_id" : [
                            "[{ d: 1209 }, { d: 1210 })"
                    ]
            }
    }
}

documented restrictions个涵盖查询中的一个是:

  

•查询谓词中的任何索引字段或投影中返回的任何字段都是嵌入文档中的字段。

但是我的查询似乎并没有引用嵌入文档中的任何字段,它只是在整个嵌入文档中声明索引边界。

问题

我的查询是否受到限制?在我的案例中是否可以有一个覆盖的查询?为什么MongoDB需要做FETCH才能完成这个查询?

0 个答案:

没有答案