MongoDB 查找与聚合性能
Posted
技术标签:
【中文标题】MongoDB 查找与聚合性能【英文标题】:MongoDB find vs aggregate performance 【发布时间】:2017-06-20 10:16:18 【问题描述】:我正在尝试衡量 MongoDB 的查找与聚合性能。 有什么方法可以比较聚合与匹配并查找查询性能。
目前我正在使用 javascript 来衡量它。
如find()
:
var start = (new Date).getTime();
db.assets.find(
"catalog_id":"f1a7669654584a42958d9589cf37d173",
"albums":"$elemMatch":"id":"5f7938ce6e2718eb776f82474f2e093f","order":"$exists":false
);
var end = (new Date).getTime();
print("elapsed " + (end - start) +" msec");
作为aggregate()
:
var start = (new Date).getTime();
db.assets.aggregate([
"$match":
"catalog_id":"f1a7669654584a42958d9589cf37d173",
"albums":"$elemMatch":"id":"5f7938ce6e2718eb776f82474f2e093f","order":"$exists":false
]);
var end = (new Date).getTime();
print("elapsed " + (end - start) +" msec");
但这对我来说似乎不对。 有人可以建议其他方法吗?
【问题讨论】:
当聚合管道仅包含$match
阶段时,find()
和 aggregate()
之间没有区别。查看这些查询中的explain()
,以更好地了解这里发生的情况
我已经尝试过解释。但在聚合的情况下它不会给出执行时间。想要测量两个查询所花费的时间。
【参考方案1】:
db.collection.explain()
操作可以返回以下信息:
find()怎么解释?
db.assets.explain("executionStats").find(
"catalog_id":"f1a7669654584a42958d9589cf37d173",
"albums":"$elemMatch":"id":"5f7938ce6e2718eb776f82474f2e093f","order":"$exists":false
);
aggregate()怎么解释?
db.assets.explain("executionStats").aggregate([
"$match":
"catalog_id":"f1a7669654584a42958d9589cf37d173",
"albums":"$elemMatch":"id":"5f7938ce6e2718eb776f82474f2e093f","order":"$exists":false
]);
【讨论】:
以上是关于MongoDB 查找与聚合性能的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB,如何将查找和排序与聚合中的 $cond 结合起来?