如何用MongoDB聚合查询获取各bookId的点赞、点踩、分享总数
MongoDB聚合查询:按bookId统计各互动类型总数
针对histories集合,要统计每个唯一bookId对应的点赞(like)、分享(share)、点踩(dislike)总数,可以使用以下aggregate管道:
db.histories.aggregate([ // 按bookId分组,统计各类型数量 { $group: { _id: "$bookId", likeCount: { $sum: { $cond: [{ $eq: ["$type", "like"] }, 1, 0] } }, shareCount: { $sum: { $cond: [{ $eq: ["$type", "share"] }, 1, 0] } }, dislikeCount: { $sum: { $cond: [{ $eq: ["$type", "dislike"] }, 1, 0] } } } }, // 重新格式化输出字段 { $project: { bookId: "$_id", likeCount: 1, shareCount: 1, dislikeCount: 1, _id: 0 } } ])
管道阶段说明
- $group:以
bookId作为分组依据,通过$cond判断每个文档的type字段,匹配目标类型时累加1,否则累加0,实现各类型的计数。 - $project:将分组后的
_id(即原bookId)重命名为bookId,并移除默认的_id字段,让输出结构更直观。
示例输出
基于你提供的两个文档,执行上述查询后会得到如下结果:
[ { "bookId": "6329af1b1c67cc8eaf26fe42", "likeCount": 1, "shareCount": 0, "dislikeCount": 0 }, { "bookId": "6322db5464c70448ad0282d4", "likeCount": 0, "shareCount": 1, "dislikeCount": 0 } ]
内容的提问来源于stack exchange,提问作者Ultron
相关产品推荐
相关产品推荐

