4

有一个示例http://docs.mongodb.org/manual/tutorial/create-indexes-to-support-queries/#indexes-covered-queries

任何索引字段都是子文档中的字段。要索引子文档中的字段,请使用点表示法。例如,考虑具有以下形式的文档的集合 users: { _id: 1, user: { login: "tester" } } 该集合具有以下索引:

{用户:1}

{ "user.login": 1 }

{ user: 1 } 索引涵盖以下查询:

db.users.find({用户:{登录:“测试员”}},{用户:1,_id:0})

但是,{ "user.login": 1 } 索引不包括以下查询:

db.users.find({“user.login”:“tester”},{“user.login”:1,_id:0})

但是,该查询确实使用 { "user.login": 1 } 索引来查找匹配的文档。

我想知道为什么 { "user.login": 1 } 索引没有涵盖查询的根本原因。

谢谢

4

2 回答 2

4

“根本原因”是此功能当前未实现。具体来说,该功能是SERVER-2104,一旦实现,您将获得所需的结果(所以去投票并观看它)。同时,要使用覆盖索引查询,您需要避免在索引中使用子文档。

于 2013-05-13T15:30:51.910 回答
4

“我想知道 { "user.login": 1 } 索引没有覆盖查询的根本原因。”

这么晚才回复很抱歉。这是我的解释:默认情况下,所有查询都返回“_id”字段,除非您在投影中省略它们。即使你没有在 { "user.login": 1 } 中提到 "_id",它也会返回 "_id",这就是索引没有被覆盖的原因。

于 2014-05-09T22:35:31.540 回答