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

如何在MongoDB中添加汇总字段值的文档至集合?

单次操作实现MongoDB汇总文档的生成与添加

嘿,我完全懂你的痛点——不想分两次操作(先聚合求和再插入),想要一步到位生成并添加那条名为"All"的汇总文档对吧?下面给你两种精准匹配需求的单次操作方案,按需选择即可:

方案1:聚合管道 + $merge 插入/更新汇总文档

这个方案会直接计算集合内所有文档num字段的总和,生成结构符合要求的"All"文档,并将其合并到目标集合中。如果集合里已经存在_id: "All"的文档,还能自动更新它的num值,灵活性拉满。

示例代码:

// 替换yourCollection为你的实际集合名
db.yourCollection.aggregate([
  // 第一步:计算所有文档num字段的总和
  {
    $group: {
      _id: null,
      totalNum: { $sum: "$num" }
    }
  },
  // 第二步:构造"All"文档的结构
  {
    $project: {
      _id: "All", // 指定文档唯一标识为"All"
      num: "$totalNum"
    }
  },
  // 第三步:将结果合并到目标集合(不存在则插入,存在则替换更新)
  {
    $merge: {
      into: "yourCollection",
      on: "_id",
      whenMatched: "replace",
      whenNotMatched: "insert"
    }
  }
])

方案2:查询时同时返回原始文档 + 汇总文档

如果你不需要把汇总文档插入集合,只是想在查询时一次性获取所有原始文档和那条"All"汇总文档,用$unionWith就能搞定:

示例代码:

db.yourCollection.aggregate([
  // 第一部分:返回集合内所有原始文档
  { $match: {} },
  // 第二部分:追加汇总的"All"文档
  {
    $unionWith: {
      coll: "yourCollection",
      pipeline: [
        { $group: { _id: "All", num: { $sum: "$num" } } }
      ]
    }
  }
])

小提示

  • 方案1适合需要持久化汇总数据的场景,比如定期更新汇总值;
  • 方案2适合临时查询需求,不用修改集合内的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:00:03