MongoDB Aggregation按_id分组统计各feeling值的分类计数
MongoDB 按_id分组统计不同feeling值计数实现
你可以直接通过$group阶段配合条件累加器实现需求,不需要额外的管道阶段,聚合代码如下:
db.你的集合名称.aggregate([ { $group: { _id: "$_id", love: { $sum: { $cond: [{ $eq: ["$feeling", "love"] }, 1, 0] } }, like: { $sum: { $cond: [{ $eq: ["$feeling", "like"] }, 1, 0] } }, dislike: { $sum: { $cond: [{ $eq: ["$feeling", "dislike"] }, 1, 0] } } } } ])
逻辑说明
- 分组维度直接指定为
$_id,按_id字段值完成分组 - 三个统计字段均使用
$sum累加器,内嵌$cond条件判断:当前分组内遍历的文档feeling字段匹配对应枚举值时累加1,不匹配则累加0,最终直接得到每个分组下三类feeling的文档总数 - 输出结果结构和你预期的格式完全一致,不需要额外加
$project做字段映射调整
注意:MongoDB默认会给集合的文档
_id字段建唯一索引,如果你这里的_id是自定义业务字段而非默认主键,建议提前给该字段建索引,能大幅提升大集合下的聚合执行效率。
内容的提问来源于stack exchange,提问作者gregg
相关产品推荐
相关产品推荐

