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

能否在MongoDB单次聚合中按name分组统计多状态文档数量?

MongoDB 单次聚合实现按名称分组统计不同状态订单数量

可以通过单次聚合操作实现需求,使用$group阶段结合$sum和$cond操作符就能同时统计两种状态的文档数量,具体聚合管道如下:

db.yourCollectionName.aggregate([
  {
    $group: {
      _id: "$name",
      pendingOrder: {
        $sum: {
          $cond: [{ $eq: ["$status", "pending"] }, 1, 0]
        }
      },
      doneOrder: {
        $sum: {
          $cond: [{ $eq: ["$status", "done"] }, 1, 0]
        }
      }
    }
  },
  {
    $project: {
      id: "$_id",
      pendingOrder: 1,
      doneOrder: 1,
      _id: 0
    }
  }
])

代码说明:

  • $group阶段:按name字段分组,通过$cond判断文档的status值,符合目标状态则累加1,否则累加0,以此分别统计pending和done状态的文档数量。
  • $project阶段:将分组的_id重命名为id,并移除默认的_id字段,让结果结构和你期望的完全匹配。

执行后得到的结果格式如下:

[
  {
    "id": "Ali",
    "pendingOrder": 11,
    "doneOrder": 10
  },
  {
    "id": "Henry",
    "pendingOrder": 12,
    "doneOrder": 20
  }
  // 其他分组结果
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:20:52