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

如何对数组元素按值分组并统计其所在父数组项的数量

MongoDB统计每个Code出现的外层文档数量

要实现统计每个code值出现在多少个外层数组项(即顶层文档)中,核心是先对每个顶层文档里的code去重,再统计去重后的code对应的文档数,具体聚合管道如下:

db.collection.aggregate([
  // 为每个顶层文档生成不重复的code数组
  {
    $addFields: {
      uniqueCodes: {
        $setUnion: [
          {
            $map: {
              input: "$providers",
              as: "provider",
              in: "$$provider.code"
            }
          }
        ]
      }
    }
  },
  // 展开去重后的code数组
  { $unwind: "$uniqueCodes" },
  // 按code分组,统计出现的顶层文档数
  {
    $group: {
      _id: "$uniqueCodes",
      total: { $sum: 1 }
    }
  },
  // 调整输出格式,把_id改为code
  {
    $project: {
      _id: 0,
      code: "$_id",
      total: 1
    }
  }
])

逻辑说明:

  • $map遍历每个顶层文档的providers数组,提取所有code值;$setUnion对提取出的code去重,确保每个顶层文档里同一个code只保留一个。
  • 对去重后的uniqueCodes数组执行$unwind,此时每个条目对应一个"顶层文档+唯一code"的组合,不会重复统计同一文档里的相同code。
  • 最后按uniqueCodes分组并累加计数,得到的就是每个code出现在多少个顶层文档中的结果。

你之前直接unwind原始providers数组再求和,会把同一文档里的重复code都算进去,所以得到的是总出现次数而非文档数,这个方案解决了这个问题。

内容的提问来源于stack exchange,提问作者Nguyễn Đức Hiếu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:31:14