在我们的代码中,为方便起见,我们使用
之类的查询db.collection.find({ "field": { $in: array } })
即使array
只包含一个元素。在这种情况下我们可以重写它只是
db.collection.find({ "field": "element" })
我们认为这些查询的行为相同,但我们注意到复杂查询包含$or
运算符和多个字段,而explain()
显示两种情况的查询计划相同,实际运行对于简单的情况,查询会快速返回,而使用$in
需要永远,因为它可能使用不同的索引扫描。
为什么mongodb查询编译器不会将$in
与单个元素转换为$eq
相同?为什么explain()
仍然表明他们使用相同的索引扫描和提取,而实际运行查询显然使用不同的计划?
答案 0 :(得分:6)
它是一样的
使用
.explain()
查看最终查询
db.collection.find({ "field": { $in: array } }).explain()
db.collection.find({ "field": "element" }).explain()
如果数组只包含1个元素,则$in
会转换为$eq