如何统计MongoDB数组中值的出现次数并获取最高频次结果?
统计MongoDB数组元素出现次数并获取高频结果
嘿,这就帮你搞定MongoDB里统计数组元素出现次数并提取高频结果的需求!针对你给出的文档结构,我们可以用MongoDB的聚合管道来实现,步骤清晰又高效。
完整聚合查询命令
直接用这段代码就能得到你想要的结果(记得把yourCollectionName换成你实际的集合名称):
db.yourCollectionName.aggregate([ // 拆分数组,每个依赖值单独成为一条文档 { $unwind: "$devDependenciesList" }, // 按依赖值分组,统计出现次数 { $group: { _id: "$devDependenciesList", count: { $sum: 1 } } }, // 按出现次数降序排序,次数相同则按依赖值排序 { $sort: { count: -1, _id: 1 } }, // 保留前3个高频结果(可根据需求调整数量) { $limit: 3 }, // 调整输出结构,匹配你想要的格式 { $group: { _id: null, topDependencies: { $push: { $concat: ["$_id", ":", { $toString: "$count" }] } } } }, { $project: { _id: 0 } } ])
各阶段作用拆解
我给你理清楚每个步骤的逻辑,方便你按需调整:
$unwind阶段:把每个文档里的devDependenciesList数组拆分成多条独立文档,每条对应一个依赖值,这是实现单个值统计的基础。$group阶段:以依赖值作为分组键,用$sum:1累加每个值的出现次数,得到每个依赖的总出现次数。$sort阶段:按统计次数从高到低排序,确保高频结果排在最前面;如果两个依赖次数相同,会按依赖值的字母顺序排序,让结果更规整。$limit阶段:只保留前N个高频结果,这里设置为3刚好匹配你想要的输出数量,你可以随时修改这个数字。- 最后两个阶段:把统计结果合并成你期望的
[value1:3,value4:3,value3:2]格式的数组,让输出完全贴合需求。
最终输出结果
执行上面的查询后,你会得到如下结果:
{ "topDependencies": ["value1:3", "value4:3", "value3:2"] }
内容的提问来源于stack exchange,提问作者Saurabh Agrawal
相关产品推荐
相关产品推荐

