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

MongoDB如何通过aggregate统计对象数组字段的count、min、max、avg指标

MongoDB聚合统计查询解决方案

报错原因

你收到的40323错误是因为将$project和$unwind两个聚合阶段写在了同一个对象中,MongoDB要求聚合管道的每个阶段必须是独立的对象,每个对象仅包含一个阶段操作符。

正确聚合查询

db.node_correlations.aggregate([
  // 拆分correlatedNodes数组,每个关联类型配置单独成一条文档
  { $unwind: "$correlatedNodes" },
  // 新增字段存储当前关联类型下nodes数组的长度
  {
    $addFields: {
      nodeCount: { $size: "$correlatedNodes.nodes" }
    }
  },
  // 按关联类型分组计算统计指标
  {
    $group: {
      _id: "$correlatedNodes.type",
      count: { $sum: "$nodeCount" },
      avg: { $avg: "$nodeCount" },
      min: { $min: "$nodeCount" },
      max: { $max: "$nodeCount" }
    }
  },
  // 转换为你要求的「类型名为键、统计结果为值」的输出格式
  {
    $group: {
      _id: null,
      stats: {
        $push: {
          k: "$_id",
          v: { count: "$count", avg: "$avg", min: "$min", max: "$max" }
        }
      }
    }
  },
  {
    $replaceRoot: {
      newRoot: { $arrayToObject: "$stats" }
    }
  }
])

阶段说明

  • $unwind:将数组格式的correlatedNodes拆分为多条独立文档,每条对应一种关联类型配置
  • $addFields:计算当前关联类型下nodes数组的长度,存储为nodeCount字段用于后续统计
  • $group:按correlatedNodes.type分组,分别统计总长度、平均长度、最小长度、最大长度
  • 最后两个阶段为格式转换逻辑,不需要目标输出格式可以删除,直接保留默认分组结果即可。

样例数据输出

用你提供的4条测试数据运行上述查询,输出结果如下:

{
  "IS_ULTIMATELY_CONSOLIDATED_BY": {
    "count": 4,
    "avg": 1,
    "min": 1,
    "max": 1
  },
  "IS_DIRECTLY_CONSOLIDATED_BY": {
    "count": 3,
    "avg": 1.5,
    "min": 1,
    "max": 2
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:57:03