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

MongoDB中计算对象总价值及按ID分组求和的问题求助

MongoDB聚合:计算总价值与按ID分组求和

嘿,我来帮你搞定这个MongoDB聚合的问题~你之前用$project里的$sum没法得到正确的跨文档总和,原因很简单:$project阶段的$sum只能针对单个文档内的字段(比如数组或多个字段)求和,没办法跨文档累加所有value的值。要实现你的需求,我们得用$group阶段来完成分组和求和操作。

一、计算所有文档的总价值

如果要把所有文档的value加起来得到一个总数值,你可以把$group的_id设为null(表示将所有文档归为一个组),然后用$sum累加每个文档的value:

db.invoices.aggregate([
  {
    $group: {
      _id: null,
      totalAll: { $sum: "$value" }
    }
  }
])

针对你的示例数据,这个查询会返回{ "_id" : null, "totalAll" : 145944 }(6个文档,每个value为24324,6×24324=145944)。

二、按id分组计算对应价值总和

如果要按id分组,把相同id的文档value累加起来,只需要把$group的_id设为$id即可。MongoDB会自动把拥有相同id的文档归为一组,同时也会把没有id字段的文档单独归为一组(_id为null):

db.invoices.aggregate([
  {
    $group: {
      _id: "$id",
      totalById: { $sum: "$value" }
    }
  }
])

针对你的示例数据,这个查询会返回两个结果:

  • 对应id: "12345"的组:{ "_id" : "12345", "totalById" : 121620 }(5个文档,5×24324=121620)
  • 没有id的组:{ "_id" : null, "totalById" : 24324 }

如果之后需要对结果做进一步处理(比如重命名字段、过滤分组),还可以在$group后面继续添加其他聚合阶段(比如$project或$match)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:28:24