MongoDB中统计对象数组内各值的出现次数
MongoDB 统计流派出现次数的实现方案
针对你需要统计books集合中各流派出现次数的需求,可以通过MongoDB的聚合管道来实现,具体步骤如下:
聚合查询代码
db.books.aggregate([ // 拆分genres数组,每个流派单独成为一条文档 { $unwind: "$genres" }, // 按流派id分组,统计出现次数 { $group: { _id: "$genres.id", count: { $sum: 1 } } }, // 调整输出格式,匹配需求结构 { $project: { _id: 0, id: "$_id", count: 1 } }, // 可选:按出现次数降序排序,和示例输出顺序一致 { $sort: { count: -1 } } ])
各阶段作用说明
- $unwind:将每个书籍文档中的
genres数组拆分为多条独立文档,比如包含2个流派的书籍会被拆成2条记录,每条对应一个流派。 - $group:以流派的
id作为分组标识,用$sum:1统计每个分组的文档数量,也就是该流派的出现次数。 - $project:重构输出结构,隐藏默认的
_id字段,将分组用的_id重命名为id,仅保留需求指定的id和count字段。 - $sort:可选阶段,按
count降序排列结果,让高频流派排在前面,和你给出的示例输出顺序完全匹配。
执行上述查询后,将得到预期结果:
[ { "id": 1, "count": 2 }, { "id": 2, "count": 1 }, { "id": 3, "count": 1 } ]
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

