【问题标题】:MongoDB find vs aggregate performanceMongoDB 查找与聚合性能
【发布时间】: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(),以更好地了解这里发生的情况
  • 我已经尝试过解释。但在聚合的情况下它不会给出执行时间。想要测量两个查询所花费的时间。

标签: mongodb mongodb-query aggregation-framework


【解决方案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}}}
    }
  }
]);

【讨论】:

    猜你喜欢
    • 2019-01-28
    • 1970-01-01
    • 2015-02-17
    • 2017-09-30
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    相关资源
    最近更新 更多