Mongodb单阵列元素与$eq的性能对比为$in
在我们的代码中,为了方便起见,我们使用如下查询Mongodb单阵列元素与$eq的性能对比为$in,mongodb,Mongodb,在我们的代码中,为了方便起见,我们使用如下查询 db.collection.find({ "field": { $in: array } }) 即使数组仅包含一个元素。在这种情况下,我们可以将其改写为 db.collection.find({ "field": "element" }) 我们认为这些查询的行为是相同的,但是我们注意到,对于包含$或运算符和多个字段的复杂查询,explain()为这两种情况显示相同的查询计划,对于简单情况,实际运行查询会快速返回,在中使用$会花费很长时间,因为它
db.collection.find({ "field": { $in: array } })
即使数组
仅包含一个元素。在这种情况下,我们可以将其改写为
db.collection.find({ "field": "element" })
我们认为这些查询的行为是相同的,但是我们注意到,对于包含$或运算符和多个字段的复杂查询,explain()
为这两种情况显示相同的查询计划,对于简单情况,实际运行查询会快速返回,在
中使用$会花费很长时间,因为它可能使用了不同的索引扫描
为什么mongodb查询编译器不能将带有单个元素的$in
转换为与$eq
相同的元素?为什么explain()
仍然显示它们使用相同的索引扫描和获取,而实际上运行查询显然使用不同的计划呢?这是一样的
使用
查看最终查询
db.collection.find({ "field": { $in: array } }).explain()
db.collection.find({ "field": "element" }).explain()
如果数组仅包含1个元素,则将$in
中的$eq
转换为$eq您使用的MongoDB服务器的具体版本,以及您比较的查询是什么?在您当前的描述中,您提到了“复杂的$或运算符和多个字段”,这似乎与$中的$是一个单独的问题,在中使用单个数组元素与等效的相等标准。如果您可以链接到gist/pastebin/,也会很有帮助。。。对于正在比较的两个查询,使用explain(true)
的输出。
db.collection.find({ "field": { $in: array } }).explain()
db.collection.find({ "field": "element" }).explain()