Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb单阵列元素与$eq的性能对比为$in_Mongodb - Fatal编程技术网

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()