簡體   English   中英

使用node.js的mongo db聚合

[英]mongo db Aggregation with node.js

我在mongodb中有一個集合,我正在使用node.js對mongo db進行聚合查詢。我的查詢如下所示:

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

我的查詢是:

  1. 該管道的匹配階段將在我的mongod碎片上運行

  2. 分階段進行將在mongos /node.js(application)層或mongod層/ database服務器上運行。

在node.js上下文中對聚合plepleine的內部結構的任何深入了解都將大有幫助。

該問題的答案是:這取決於。

首先,它取決於您的MongoDB版本。 其次,這還取決於您的分片密鑰配置。 關於MongoDB v3.4的聚合框架以及分片集合文檔在此主題上並不詳盡。 但是,它明確指出:

如果管道以分片鍵上的確切$ match開頭,則整個管道僅在匹配的分片上運行。 以前,管道將被拆分,並且合並它的工作將必須在主碎片上完成。

對於必須在多個分片上運行的聚合操作,如果這些操作不需要在數據庫的主分片上運行,則這些操作會將結果路由到隨機分片以合並結果,以避免該數據庫的主分片過載。 $ out階段和$ lookup階段需要在數據庫的主分片上運行。

但是,此站點上最有趣的聲明可能是以下內容:

要查看管道的拆分方式,請在db.collection.aggregate()方法中包括explain選項。

這樣,您可以了解自己的具體情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM