[英]mongo db Aggregation with node.js
我在mongodb中有一個集合,我正在使用node.js對mongo db進行聚合查詢。我的查詢如下所示:
db.orders.aggregate([
{$match:{status:"A"}},
{$group:{_id:"$cust_id",total:{$sum:"$amount"}}}])
我的查詢是:
該管道的匹配階段將在我的mongod碎片上運行
分階段進行將在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.