mongodb索引覆盖查询

时间:2013-05-13 12:39:23

标签: mongodb indexing

有一个示例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}索引未涵盖查询的根本原因。

谢谢

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

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