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

MongoDB如何按code和name分组统计A/B/C三类数量并输出单行结果

实现方案

你可以直接使用MongoDB的聚合(Aggregation)管道实现需求,核心是分组时用条件累加不同type的计数,完整语句如下:

db.collection.aggregate([
  // 第一阶段:按code+name分组,统计各type的数量
  {
    $group: {
      _id: {
        code: "$code",
        name: "$name"
      },
      // 统计type=A的数量,符合条件加1,否则加0
      totalA: {
        $sum: { $cond: [{ $eq: ["$type", "A"] }, 1, 0] }
      },
      // 统计type=B的数量
      totalB: {
        $sum: { $cond: [{ $eq: ["$type", "B"] }, 1, 0] }
      },
      // 统计type=C的数量
      totalC: {
        $sum: { $cond: [{ $eq: ["$type", "C"] }, 1, 0] }
      }
    }
  },
  // 第二阶段:格式化输出字段,按需拼接字符串
  {
    $project: {
      _id: 0,
      // 你需要的连字符拼接格式行
      line: {
        $concat: [
          "$_id.name",
          "-",
          "$_id.code",
          "-",
          { $toString: "$totalA" },
          "-",
          { $toString: "$totalB" },
          "-",
          { $toString: "$totalC" }
        ]
      },
      // 可保留单独字段方便后续处理,不需要可以删除
      name: "$_id.name",
      code: "$_id.code",
      totalA: 1,
      totalB: 1,
      totalC: 1
    }
  }
])

逻辑说明

  • $group阶段的分组键用code+name,因为你提到两个字段一一对应,不会出现同code不同name的情况,分组逻辑不会产生冗余
  • $cond是条件表达式,匹配对应type就返回1给$sum累加,否则返回0,就能分别统计三类的计数
  • 如果不需要单独的计数字段,只想要拼接好的行,可以把$project里的name、code、totalA等字段直接删掉

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:15:03