MongoDB中多数组内唯一value值出现频次统计方法咨询
解决MongoDB多数组中value字段的频次统计问题
嘿,我来帮你搞定这个统计需求!针对你已经投影后的数据结构,用MongoDB的聚合管道就能完美实现目标,具体的实现步骤和代码如下:
核心思路
要统计所有数组中不同value的总出现次数,需要先把嵌套的数组拆分成独立文档,再按value分组计数,最后调整输出格式即可。
聚合管道代码
db.your_collection_name.aggregate([ // 1. 将每个文档中的values数组拆分为单个文档 { $unwind: "$values" }, // 2. 按value字段分组,统计每个value的总出现次数 { $group: { _id: "$values.value", count: { $sum: 1 } } }, // 3. 格式化输出结构,把_id替换为value字段 { $project: { _id: 0, // 隐藏默认的_id字段 value: "$_id", count: 1 // 保留count字段 } }, // 可选:按出现次数降序排序(如果需要的话) { $sort: { count: -1 } } ])
步骤解释
- $unwind阶段:这一步会把每个文档里的values数组“展开”,数组里的每个
{value: "x"}对象都会变成一个独立的文档,这样后续就能针对每个value进行统计。 - $group阶段:以
values.value作为分组键(_id),用$sum:1来累加每个分组的文档数量,得到每个value的总出现次数。 - $project阶段:调整输出的文档结构,把分组用的
_id重命名为value,同时隐藏原来的_id字段,最终得到你想要的{value: "x", count: n}格式。 - 可选的$sort阶段:如果希望结果按出现次数从多到少排列,可以加上这一步,
count: -1表示降序排序。
这样运行聚合后,你就能得到所有不同value值及其在所有数组中的总出现次数,完全符合你的预期结果!
内容的提问来源于stack exchange,提问作者Herakles
相关产品推荐
相关产品推荐

