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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:32:42