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

MongoDB聚合中动态统计字段值:无需硬编码实现类型计数

MongoDB 动态统计不同 type 数量及总 listing 数方案

实现思路

通过 MongoDB 聚合框架的分组、数组转对象等原生操作,动态提取数据中的 type 值并统计数量,全程无需硬编码 type 枚举值,同时计算总 listing 数。

完整聚合阶段示例

假设你已经完成了 listingsCollections 匹配、关联 listings 和 profile 的前置聚合步骤,直接追加以下阶段即可生成目标结构:

[
  // --- 前置关联阶段(已完成的 match、lookup 等逻辑)---
  
  // 第一步:按 type 分组,统计每个 type 的数量
  {
    $group: {
      _id: "$type",
      count: { $sum: 1 }
    }
  },
  // 第二步:将分组结果转换为 { k: type值, v: 统计数 } 的标准格式
  {
    $project: {
      _id: 0,
      k: "$_id",
      v: "$count"
    }
  },
  // 第三步:聚合所有 type 统计数据,并计算总 listing 数
  {
    $group: {
      _id: null,
      typeStats: { $push: "$$ROOT" },
      totalListings: { $sum: "$v" }
    }
  },
  // 第四步:转换为最终的目标结构
  {
    $replaceRoot: {
      newRoot: {
        $mergeObjects: [
          { $arrayToObject: "$typeStats" }, // 动态生成各 type 的统计字段
          { totalListings: "$totalListings" }
        ]
      }
    }
  }
]

关键操作说明

  • $group 按 type 分组统计,避免硬编码枚举值,完全从数据中动态提取类型
  • $arrayToObject 将收集的 type 统计数组转换为键值对对象,直接映射为目标结构中的类型统计字段
  • 总 listing 数通过对各 type 统计数求和得到,确保数据一致性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 23:45:03