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

MongoDB查询中对数组元素执行Groupby,统计不同元素的重复次数

MongoDB统计数组字段内元素出现次数的实现方法

你可以通过MongoDB的聚合(Aggregation)管道实现该需求,核心用到$unwind和$group两个操作符,以下是具体实现代码:

// 请将下方的collectionName替换为你实际的集合名称
db.collectionName.aggregate([
  // 第一步:拆分tags数组,将每个数组元素转为独立的文档
  { $unwind: "$tags" },
  // 第二步:按标签值分组,统计每个标签的出现次数
  {
    $group: {
      _id: "$tags",
      count: { $sum: 1 }
    }
  },
  // 可选:按出现次数倒序排序,方便查看高频标签
  { $sort: { count: -1 } }
])

执行逻辑说明

  • $unwind: "$tags":会把每一条原文档中的tags数组拆分为N条文档(N为数组长度),每条文档仅保留tags数组中的一个元素。针对你给出的示例数据,该阶段执行后会生成6条文档。
  • $group阶段:以tags字段的具体值作为分组依据,$sum: 1表示每匹配到一个同组的文档就计数加1,最终得到每个标签的总出现次数。

示例数据返回结果

针对你给出的两条示例数据,执行上述聚合语句后返回结果如下:

{ "_id" : "database", "count" : 2 }
{ "_id" : "SQL", "count" : 1 }
{ "_id" : "NoSQL", "count" : 1 }
{ "_id" : "mongodb", "count" : 1 }
{ "_id" : "PHP", "count" : 1 }

拓展场景

如果需要过滤出现次数大于N的标签,可以在聚合管道最后追加$match阶段,比如过滤出现次数≥2的标签:

db.collectionName.aggregate([
  { $unwind: "$tags" },
  {
    $group: {
      _id: "$tags",
      count: { $sum: 1 }
    }
  },
  { $match: { count: { $gte: 2 } } }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:09:03