mongo db与node.js的聚合

时间:2017-07-31 15:33:02

标签: node.js mongodb aggregation-framework

我在mongodb中有一个集合,我使用node.js对mongo db进行聚合查询。我的查询如下所示:

db.orders.aggregate([
                 {$match:{status:"A"}},
                 {$group:{_id:"$cust_id",total:{$sum:"$amount"}}}])

我的疑问是:

  1. 此管道的匹配阶段将在我的mongod分片

  2. 上运行
  3. 逐个分组将在mongos /node.js(application)图层上运行     或者在mongod层/数据库服务器上。

  4. 在node.js的上下文中对聚合pipleine内部的任何洞察都会有很大的帮助。

1 个答案:

答案 0 :(得分:0)

问题的答案是:这取决于。

首先,它取决于您的MongoDB版本。其次,它还取决于您的分片键配置。 documentation on the aggregation framework for MongoDB v3.4 in conjunction with sharded collections对此主题并不完全详尽。但是,它明确指出:

如果管道以分片键上的精确$ match开头,则整个管道仅在匹配的分片上运行。以前,管道会被拆分,合并它的工作必须在主要的碎片上完成。

  

对于必须在多个分片上运行的聚合操作,如果是   操作不需要在数据库的主分片上运行,   这些操作会将结果路由到随机分片以合并   结果,以避免重载该数据库的主分片。该   $ out阶段和$ lookup阶段需要在数据库上运行   主要分片。

然而,这个网站上最有趣的声明可能就是这个:

  

要查看管道是如何拆分的,请在中包含explain选项   db.collection.aggregate()方法。

通过这种方式,您可以了解自己的具体情况。