MongoDB涵盖的查询

时间:2015-06-09 07:10:42

标签: mongodb

我不确定我是否理解完全覆盖的查询概念。如果可以仅使用索引中存储的信息来回答,我们有一个覆盖的查询。通常使用投影来覆盖查询。

如果我们的查询排序'除了找到'''排序'部分需要被索引覆盖才能拥有涵盖查询?

我是这么认为的,但由于我还没有在互联网上找到明确的答案,我更愿意提问。

谢谢你,Ane

2 个答案:

答案 0 :(得分:1)

我也找不到明确的答案,但这是合乎逻辑的 - 如果你需要排序,你需要根据你正在排序的数据。如果这些数据没有存储在索引中,您需要从其他地方读取它们,然后您就没有覆盖的查询,因为如果覆盖的查询是您不必的话看看索引以外的任何地方。

您可以使用explain()进行检查。

答案 1 :(得分:1)

非常感谢,您的回答非常有帮助。 我已在本地集合中完成了一些测试,实际上排序部分需要被索引覆盖,以便进行覆盖查询。

示例: 1 .-我在空集合中创建了一个索引:

db.myCollection.createIndex({x:1,y:1,z:1})

2 .-我插入了数据

db.myCollection.insert({x:5})

3.-我做了不同的查询并使用'explain'来查看是否覆盖了查询(indexOnly:true)

db.myCollection.find({x:5},{x:1,_id:0}) --> it is covered !
db.myCollection.find({x:5},{x:1,_id:0}).sort({x:1}) --> it is covered !
db.myCollection.find({x:5,y:4},{x:1,_id:0}).sort({x:-1,y:-1}) --> it is covered!


db.myCollection.find({x:5},{x:1,_id:0}).sort({z:1}) --> it is NOT covered !
db.myCollection.find({x:5},{x:1,_id:0}).sort({y:-1,x:-1}) --> it is NOT covered !

因此,此示例显示“排序”会影响查询是涵盖查询