我在项目中有非常复杂的查询。它可能潜在地(取决于用户的参数)具有很多条件,这些条件我置于$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()
来调查结果,但是它没有回答我的问题,因为我的实际查询量很大,导致产生了庞大的报告,这真的很难分析。
答案 0 :(得分:0)
尝试使用较小的查询调查结果。
我在我的一个数据库中进行了比较,对这两个版本进行了实验,结果发现在给定一个具有3个选项的简单查询的情况下,执行计划没有差异。这几乎是我所期望的,因为它们实际上应该等同于同一查询。
我想您会发现查询最终使用的索引比查询的格式对性能的影响更大。