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

MongoDB新手求助:按指定ID去重统计数据问题

修正MongoDB聚合管道实现去重统计

嘿,我来帮你搞定这个去重统计的问题~ 先看看你现有管道的问题:

  • 硬编码了client_id: "1",只能统计单个客户,没法处理所有数据
  • 分组只按invoice_month,没结合client_id,会把不同客户的同一月份合并
  • 没有做去重处理,所以会把重复文档都算进去

下面是修正后的聚合管道,完全符合你的预期结果:

[
  // 过滤出账户状态为Active的所有文档(不要硬编码client_id哦)
  { "$match": { "invoice.account_status": "Active" } },
  // 展开invoice数组,方便后续访问里面的字段
  { "$unwind": "$invoice" },
  // 按「client_id + invoice_month」组合分组,自动去重重复的组合
  { "$group": {
    "_id": {
      "client_id": "$client_id",
      "invoice_month": "$invoice.invoice_month"
    }
  } },
  // 转换成你需要的输出格式,设置count为1
  { "$project": {
    "_id": 0,
    "client_id": "$_id.client_id",
    "invoice_month": "$_id.invoice_month",
    "count": 1
  } }
]

步骤解释:

  1. $match阶段:去掉了固定的client_id筛选,保留所有账户状态为Active的文档,这样能处理所有客户的数据
  2. $unwind阶段:把每个文档里的invoice数组展开(虽然你的数据里每个invoice只有一个元素,但必须展开才能直接访问invoice_month)
  3. $group阶段:用client_id和invoice_month的组合作为分组依据,这样所有重复的客户+月份组合会被合并成一条记录,自动完成去重
  4. $project阶段:把分组后的_id拆分成你需要的字段,设置count为1,同时去掉默认的_id字段,得到和预期完全一致的输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:52:36