You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB Aggregate分组异常:无法按省份与运动类型统计数据

问题原因与修正方案

问题核心

你的聚合查询中,$match阶段出现了重复的$or键。在JSON对象里,重复的键会被最后一个值覆盖,所以原查询里的省份过滤条件{$or: [{province: "Cologne"}, {province: "Berlin"}]}直接被后面的类型过滤条件覆盖了。最终$match只生效了类型过滤,完全没限制地区,自然会出现非柏林、科隆的数据。

修正后的查询

方式1:用$and组合两个$or条件

把两个$or放在$and的数组里,确保两个条件同时生效:

db.getCollection("Sport").aggregate([
    {$match: {
        $and: [
            {$or: [{province: "Cologne"}, {province: "Berlin"}]},
            {$or: [{type: "Running"}, {type: "Swimming"}]}
        ]
    }},
    {$group: {_id: {province: "$province", type: "$type"}, number: {$sum: 1}}},
    {$sort: {number: -1}}
])

方式2:用$in简化条件(更简洁高效)

针对省份和类型的多值匹配,用$in替代$or,代码更清晰:

db.getCollection("Sport").aggregate([
    {$match: {
        province: {$in: ["Cologne", "Berlin"]},
        type: {$in: ["Running", "Swimming"]}
    }},
    {$group: {_id: {province: "$province", type: "$type"}, number: {$sum: 1}}},
    {$sort: {number: -1}}
])

额外说明

你之前尝试把$or嵌套进$and无效,大概率是嵌套格式写错了——$and需要接收一个条件数组,每个元素是独立的查询条件,不能直接写$and: {$or:..., $or:...}这种格式,必须把两个$or放在数组里。

内容的提问来源于stack exchange,提问作者Confuzius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 08:54:24