You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB聚合查询中$sum函数用法及相关语法疑问

MongoDB聚合查询疑问解答

原始聚合代码

db.sales.aggregate(
   [
     {
       $group:
         {
           _id: { day: { $dayOfYear: "$date"}, year: { $year: "$date" } },
           totalAmount: { $sum: { $multiply: [ "$price", "$quantity" ] } },
           count: { $sum: 1 }
         }
     }
   ]
)

执行输出

{ "_id" : { "day" : 46, "year" : 2014 }, "totalAmount" : 150, "count" : 2 }
{ "_id" : { "day" : 34, "year" : 2014 }, "totalAmount" : 45, "count" : 2 }
{ "_id" : { "day" : 1, "year" : 2014 }, "totalAmount" : 20, "count" : 1 }

疑问解答

1. 为何不能直接用totalAmount: { $multiply: [ "$price", "$quantity" ] }替代?

$group阶段的核心是按指定_id将文档分组,每组最终只输出一条汇总文档。如果直接使用$multiply,它只会提取分组内任意单条文档的price和quantity计算乘积,无法实现整个分组的金额累加。

而$sum: { $multiply: ... }的逻辑是:先对分组内每一条文档计算单条记录的金额(price*quantity),再把所有单条金额累加,最终得到该分组的总销售额,这才是我们需要的分组汇总结果。

2. count: { $sum: 1 }的工作原理及数字1的作用?

$sum在$group阶段会对分组内的每一条文档执行累加操作。这里的数字1是计数单位:每遍历到分组内的一条文档,就往累加器中加1。遍历完分组内所有文档后,累加的结果就是该分组的文档总数,也就是每组的销售记录条数。


内容的提问来源于stack exchange,提问作者ZeroAutumn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 08:07:25