MongoDB聚合:跨文档不同字段(Home/Away)的相同值分组统计
问题核心逻辑偏差说明
此前尝试的$cond条件判断、$or逻辑作为分组键的方案,本质是单文档维度的单值选择:从每个文档的Home、Away两个字段中挑选一个值作为分组依据,无法同时把两个字段的取值都纳入统计范围,因此必然存在计数遗漏。
要实现跨字段同值统一聚合的需求,核心思路是先把分散在不同字段的取值拆分为独立的统计单元,再执行统一的分组计数,不需要在分组阶段嵌套复杂的条件判断逻辑。
可直接运行的聚合实现
按顺序在聚合管道中配置以下3个阶段,即可得到符合预期的统计结果:
- 构造统一取值集合:通过
$project把单文档的Home、Away值组装为数组,将两个独立字段的取值收敛到同一结构下{ $project: { statValues: ["$Home", "$Away"] } } - 拆分统计单元:通过
$unwind将上一步生成的数组拆分为独立文档,每个数组元素对应一条独立的待统计记录{ $unwind: "$statValues" } - 分组计数:对拆分后的所有取值做统一分组,累计每个值的出现次数
{ $group: { _id: "$statValues", count: { $sum: 1 } } }
输出结果校验
上述管道的最终输出和需求预期完全匹配:
{"_id": "A", "count": 3}, {"_id": "B", "count": 3}, {"_id": "C", "count": 4}
实际使用时,如果存在Home或Away字段为空值的异常文档,可在$unwind阶段后新增$match规则,剔除空值、无效值的统计记录,避免计数偏差。
内容的提问来源于stack exchange,提问作者user8935452
相关产品推荐
相关产品推荐

