单个数组元素与$ eq的Mongodb性能为$ in

问题描述 投票:5回答:1

在我们的代码中,为方便起见,我们使用类似的查询

db.collection.find({ "field": { $in: array } })

即使array只包含一个元素。在这种情况下,我们可以简单地改写它

db.collection.find({ "field": "element" })

我们认为这些查询的行为相同,但我们注意到复杂查询包含$or运算符和多个字段,而explain()显示两种情况的相同查询计划,实际运行查询会快速返回简单情况,同时使用$in需要永远,因为它可能正在使用不同的索引扫描。

为什么mongodb查询编译器不会将$in与单个元素转换为$eq相同?为什么explain()仍然会显示他们使用相同的索引扫描和提取,而实际运行查询显然使用不同的计划?

mongodb
1个回答
6
投票

一样的

使用

.explain()

看到最后的查询

db.collection.find({ "field": { $in: array } }).explain()
db.collection.find({ "field": "element" }).explain()

如果数组只包含1个元素,则$in会转换为$eq

© www.soinside.com 2019 - 2024. All rights reserved.