MongoDB:$和运算符是否会影响查询性能?

时间:2019-10-21 15:27:14

标签: mongodb mongodb-query

我在项目中有非常复杂的查询。它可能潜在地(取决于用户的参数)具有很多条件,这些条件我置于$and$or运算符下。

这是一个非常简化的示例:

docs.find({name:"shaq", organization: "myorg", url:{$exists:true}})

因此,在上述满足全部要求的文件中,将检索三个条件。 通过以下代码可以达到相同的结果:

docs.find({$and:[
 {name:"shaq"}, 
 {organization:"myorg"}, 
 {url:{$exists:true}}
]})

我想知道这如何影响性能。实际上是一样的,还是由于增加了运算符而使工作速度变慢了,还是因为根据official docs而工作了?

  

$and运算符使用短路评估表示,如果首先   列表中的表达式返回false mongo将不评估   剩余的表情

问题是:在$and运算符下放置条件是否会影响性能?如果是,那么会有什么影响?

P.S。 我尝试使用mongos explain()来调查结果,但是它没有回答我的问题,因为我的实际查询量很大,导致产生了庞大的报告,这真的很难分析。

1 个答案:

答案 0 :(得分:0)

尝试使用较小的查询调查结果。

我在我的一个数据库中进行了比较,对这两个版本进行了实验,结果发现在给定一个具有3个选项的简单查询的情况下,执行计划没有差异。这几乎是我所期望的,因为它们实际上应该等同于同一查询。

我想您会发现查询最终使用的索引比查询的格式对性能的影响更大。