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

如何在MongoDB中按数组内对象的部分匹配统计文档数?

MongoDB数组对象字段匹配统计方案

推荐方案:直接数组字段查询(性能更优)

不需要使用$expr,直接针对数组内的字段构建查询条件即可,MongoDB会自动识别并匹配数组中存在符合条件元素的文档:

filter = {
    "seasonToScrap2": season,
    "events.event_time": "27"
}
htGoal = db[table].count_documents(filter)

备选方案:使用$expr结合$map+$anyElementTrue

如果业务场景必须使用$expr表达式,可以通过遍历数组元素并判断字段值的方式实现:

filter = {
    "$expr": { 
        "$and": [
            {"$eq": ["$seasonToScrap2", season]},
            { "$anyElementTrue": {
                "$map": {
                    "input": "$events",
                    "as": "event",
                    "in": { "$eq": ["$$event.event_time", "27"] }
                }
            }}
        ] 
    }
}
htGoal = db[table].count_documents(filter)

原方案问题说明

你之前使用的$in会严格匹配整个对象,只有当数组中存在一个和{"event_time": "27"}完全一致(无其他额外字段)的元素时才会命中,而你的数据中每个event对象还包含team、event等字段,因此无法匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:46:11