MongoDB,更快的是:find.limit(10)还是aggregate({$limit:10})

MongoDB,更快的是:find.limit(10)还是aggregate({$limit:10}),mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我如何知道哪个更快、更高效,find.limit(10)或聚合({$limit:10})?我听说很多限制会影响Mongo的性能,这是真的吗,还是自从新的3.0引擎以来已经改变了 另外,是否有一种实用的方法来评估mongo上查询的性能?有几种方法可以从查询中获得执行时间和性能。首先,您可以设置db.setProfilingLevel(2),它将所有数据库活动记录到日志中,并显示每个操作所用的时间。您还可以通过在游标上运行explain()查看数据库的实际操作,从shell中获得查询的性能 db.f

我如何知道哪个更快、更高效,
find.limit(10)
聚合({$limit:10})
?我听说很多限制会影响Mongo的性能,这是真的吗,还是自从新的3.0引擎以来已经改变了


另外,是否有一种实用的方法来评估mongo上查询的性能?

有几种方法可以从查询中获得执行时间和性能。首先,您可以设置
db.setProfilingLevel(2)
,它将所有数据库活动记录到日志中,并显示每个操作所用的时间。您还可以通过在游标上运行
explain()
查看数据库的实际操作,从shell中获得查询的性能

db.foo.find({}).limit(10.explain()

您也可以对聚合进行解释,但它似乎没有给您提供执行时间,只是提供了所采取的步骤,因此您可能不得不这样做

var date = new Date()
db.foo.aggregate([
    {$limit: 10}])
var time = new Date() - date;
如果你感兴趣的话,我们会解释


db.foo.aggregate([{$limit:10}],{explain:true})

从技术上讲,2.6版本中实现了重大的引擎更改,3.0更像是提供了一个可插拔存储更改,但所有真正的更改都已经存在。两者之间并没有什么区别,但这取决于你在做什么。这里最大的“误称”是
.aggregate()
速度慢,而事实并非如此。人们希望执行的聚合操作本质上比不执行这些操作的常规查询“慢”。如果你想要“实用”的话,我建议你进行时间比较,但同样的,这都是关于你实际上在做什么。@BlakesSeven,在mongoIn mongo中如何进行时间比较什么?壳司机?Java驱动程序?对于shell,我只需通过
newdate()
Date为“开始”时间设置一个变量。现在执行查询/pipline后,为“结束”设置另一个变量,然后获得差异。在没有许多其他因素的情况下,本地连接应该是一个合理的“指南”。还要确保每个操作都要运行几次,并对初始运行进行折扣,以允许加载数据。@BlakesSeven如果希望从数据库获得原始性能和执行时间,在这里运行
explain()
不是更好的解决方案吗?explain的时间就是explain查询的时间,而不是它所解释的问题。我想,FIN().LIMIT()因为它在我的评论中加载了更少的C++代码,解释了解释查询的时间,所以速度更快。不是它所解释的查询,这是行不通的。它将为您提供mongodb在执行状态下执行的查询计划的最佳估计,不是吗?它会,但它不会告诉您在这种情况下聚合与查询否哪个更快,但OP还要求提供一种评估查询性能的实用方法。使用explain可以进行苹果对苹果的比较,而无需引入驱动程序或依赖秒表或计时器。我相信这里唯一正确的答案是查询分析器: