MongoDB按日期分组统计:实现字段在指定数组内/外及总计数
实现MongoDB按日期分组统计指定字段的匹配与非匹配数量
可以通过MongoDB的聚合管道来实现需求,核心利用$group分组统计结合条件判断,再通过$addFields计算非匹配数量,具体实现如下:
完整聚合查询代码
db.your_collection_name.aggregate([ { $group: { _id: "$date", count: { $sum: 1 }, in_array: { $sum: { $cond: [ { $in: ["$field", ["A", "D", "E"]] }, // 替换为你的目标数组 1, 0 ] } } } }, { $addFields: { not_in_array: { $subtract: ["$count", "$in_array"] } } } ])
各阶段说明
$group 分组统计
- 以
date字段作为分组依据(_id: "$date") count字段通过$sum:1累加每组的总记录数in_array字段使用$cond条件判断:借助$in运算符检查当前文档的field值是否在指定数组内,符合条件则累加1,否则累加0,最终得到每组中匹配数组的记录数
- 以
$addFields 计算非匹配数量
- 新增
not_in_array字段,通过总记录数count减去匹配数in_array,直接得到每组中不在目标数组内的记录数
- 新增
执行上述查询后,就能得到你期望的输出格式。
内容的提问来源于stack exchange,提问作者LMY
相关产品推荐
相关产品推荐

