MongoDB聚合查询匹配跨年月范围时如何排除无效数据避免重复统计
MongoDB跨年度范围查询调整方案
现有代码问题
你当前的$match逻辑存在范围溢出问题:仅通过$in匹配年份和月份的规则,会把2020年1月-8月符合月份要求的文档也纳入统计,刚好是你需要排除的范围。
修正后聚合语句
[ { $match: { $or: [ // 匹配2020年10-12月 { "Calendar Year": 2020, "Month": { $in: ["Oct", "Nov", "Dec"] } }, // 匹配2021年1-8月 { "Calendar Year": 2021, "Month": { $in: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug"] } } ] } }, { $group: { // 若需要整个时间段的汇总结果,_id设为null即可匹配你给出的预期返回格式 // 若需要按月份+站点分组统计,把_id替换为{ 'Month': '$Month', 'Facility': '$Facility' }即可 _id: null, MGal_treated: { $sum: "$MGal Treated" }, Cr_mass_treated: { $sum: "$Chrome (kg)" } } } ]
逻辑说明
调整后的匹配逻辑完全覆盖2020年10月到2021年8月的统计区间,完全排除了2020年1-9月、2021年9-12月的无效数据,不会出现重复统计问题。
内容的提问来源于stack exchange,提问作者mountainscaler
相关产品推荐
相关产品推荐

