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
相关产品推荐
相关产品推荐

