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

如何按特定条件对MongoDB分组结果进行汇总整理?

MongoDB 自定义状态分组统计实现方案

核心逻辑

先给每条数据打上对应目标类别(IN_AUCTION/PROCESSING/DELIVERING/OTHERS)的标签,再按标签分组统计数量,还可按需把结果整理成更直观的键值对格式。

完整聚合代码

假设你的状态映射规则如下(可根据实际需求修改数组内的status_id值):

  • IN_AUCTION: [1, 2, 3]
  • PROCESSING: [4, 5, 6]
  • DELIVERING: [7, 8]

直接运行以下聚合管道:

db.yourCollection.aggregate([
  // 第一步:为每条数据添加类别标签
  {
    $addFields: {
      status_category: {
        $switch: {
          branches: [
            { case: { $in: ["$status_id", [1, 2, 3]] }, then: "IN_AUCTION" },
            { case: { $in: ["$status_id", [4, 5, 6]] }, then: "PROCESSING" },
            { case: { $in: ["$status_id", [7, 8]] }, then: "DELIVERING" }
          ],
          default: "OTHERS"
        }
      }
    }
  },
  // 第二步:按类别分组统计数量
  {
    $group: {
      _id: "$status_category",
      count: { $sum: 1 }
    }
  },
  // 可选:把多文档结果合并为单文档的键值对(更易读取)
  {
    $group: {
      _id: null,
      status_stats: {
        $mergeObjects: {
          $arrayToObject: [[["$_id", "$count"]]]
        }
      }
    }
  },
  // 可选:只保留统计结果字段
  {
    $project: {
      _id: 0,
      status_stats: 1
    }
  }
])

结果说明

  • 不使用最后两个可选阶段时,输出是各类别独立文档:
    { "_id" : "IN_AUCTION", "count" : 15 }
    { "_id" : "PROCESSING", "count" : 8 }
    { "_id" : "DELIVERING", "count" : 5 }
    { "_id" : "OTHERS", "count" : 3 }
    
  • 使用可选阶段后,输出为包含所有统计的单文档:
    {
      "status_stats" : {
        "IN_AUCTION" : 15,
        "PROCESSING" : 8,
        "DELIVERING" : 5,
        "OTHERS" : 3
      }
    }
    

注意事项

  • 替换yourCollection为你的实际集合名称
  • 若status_id是字符串类型,把数组内的数字改成对应字符串即可
  • 可根据业务需求随时调整各类别对应的status_id集合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:44:58