有一个示例http://docs.mongodb.org/manual/tutorial/create-indexes-to-support-queries/#indexes-covered-queries
任何索引字段都是子文档中的字段。索引字段 在子文档中,使用点表示法。例如,考虑一个集合 具有以下格式的文档的用户:{_ id:1,user:{login: “tester”}}该集合具有以下索引:
{user:1}
{“user.login”:1}
{user:1}索引涵盖以下查询:
db.users.find({user:{login:“tester”}},{user:1,_id:0})
但是,{“user.login”:1}索引不包含以下内容 查询:
db.users.find({“user.login”:“tester”},{“user.login”:1,_id:0} )
但是,查询确实使用{“user.login”:1}索引来查找 匹配文件。
我想知道{“user.login”:1}索引未涵盖查询的根本原因。
谢谢
答案 0 :(得分:4)
“根本原因”是当前未实现此功能。具体来说,该功能是SERVER-2104,一旦实现,您将获得所需的结果(因此请投票并观看)。同时,要利用覆盖索引查询,您需要避免在索引中使用子文档。
答案 1 :(得分:4)
"我想知道{" user.login":1}索引未覆盖查询的根本原因。"
很抱歉迟到的回复。这是我的解释: 默认情况下,所有查询都返回" _id"除非你在投影中省略它们。 即使你没有提及" _id"在{" user.login":1}中,它将返回" _id",这就是索引未被覆盖的原因。