Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.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:要查找具有三个整数值的对象,请对三个值的范围进行排序或执行三次查询?_Mongodb - Fatal编程技术网

MongoDB:要查找具有三个整数值的对象,请对三个值的范围进行排序或执行三次查询?

MongoDB:要查找具有三个整数值的对象,请对三个值的范围进行排序或执行三次查询?,mongodb,Mongodb,我的基本问题是:哪个更有效? mongo_db[collection].find(year: 2000) mongo_db[collection].find(year: 2001) mongo_db[collection].find(year: 2002) 或 mongo_db[collection].find(year: { $gte: 2000, $lte: 2002 }).sort({ year: 1 }) 更详细的信息:我有一个MongoDB查询,在其中我将选择“year”属性值为2

我的基本问题是:哪个更有效?

mongo_db[collection].find(year: 2000)
mongo_db[collection].find(year: 2001)
mongo_db[collection].find(year: 2002)

mongo_db[collection].find(year: { $gte: 2000, $lte: 2002 }).sort({ year: 1 })

更详细的信息:我有一个MongoDB查询,在其中我将选择“year”属性值为2000、2001或2002的对象,但不选择其他对象。这最好是作为一个
find()
和一个
sort()
,还是每个值有三个独立的
find()?如果它取决于我的集合的大小,那么更高效的搜索模式会改变到什么大小?

单个查询会更快,因为Mongo只需扫描集合(或其索引)一次,而不是三次。但是您不需要范围查询的
sort
子句,除非您确实希望出于单独的原因对结果进行排序

您也可以在
中使用
$in来执行以下操作:

mongo_db[collection].find({year: {$in: [2000, 2001, 2002]}})

它的性能应该与范围查询非常相似。

您的索引是什么?不太可能改变答案,但可能是这里最重要的性能相关问题。我确实需要排序。这是否意味着
$in
子句比单独的命中更快?@PatZabawa,即使是我所期望的排序,也是如此。但对于性能问题的具体答案,您需要使用自己的数据和硬件进行实际测试。