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

MongoDB中如何提取数组去重值并分组统计出现次数

解决MongoDB中数组元素去重统计的问题

你当前的聚合查询之所以得不到正确结果,是因为$group阶段直接把整个country_array数组作为分组键,这样会把["USA", "UK", "Italy"]和["USA", "Italy"]当成两个不同的分组,统计的是不同数组的出现次数,而不是单个国家的出现次数。

正确的做法需要先将数组拆分为单个元素,再按国家分组统计,完整查询如下:

db.collection.aggregate([
  // 过滤出key为Dummy的文档
  { $match: { "key": "Dummy" } },
  // 将country_array数组拆分为单个文档,每个文档对应一个国家
  { $unwind: "$country_array" },
  // 按国家分组,统计出现次数
  {
    $group: {
      _id: "$country_array",
      total: { $sum: 1 }
    }
  },
  // 重命名字段,匹配期望输出格式
  {
    $project: {
      _id: 0,
      country: "$_id",
      total: 1
    }
  }
])

各阶段说明:

  • $match:保留key为Dummy的文档,过滤掉无关数据。
  • $unwind:把每个文档中的country_array数组拆分成多条文档,比如第一个文档会被拆成3条,分别对应USA、UK、Italy。
  • $group:以单个国家作为分组键(_id: "$country_array"),用$sum:1统计每个国家出现的总次数。
  • $project:去掉默认的_id字段,将_id重命名为country,输出country和total字段,和你期望的格式一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:08:11