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

MongoDB如何匹配任意嵌套字段下end_flag为true的文档

解决方案

错误原因说明

  • 你第一种写法默认是AND逻辑,必须所有列出的X.end_flag都为true才会命中文档,不符合「任意一个为true即命中」的要求
  • 第二种$in的用法错误,普通$match查询中不能直接用$字段名的方式引用文档字段值,需要搭配$expr才能使用字段引用语法

可行实现方案

方案1:已知所有X的取值(比如你的场景里是1~10)

该方案查询效率最高,直接用$or组合所有条件即可:

[
    {
        "$match": {
            "$or": [
                {"1.end_flag": true},
                {"2.end_flag": true},
                {"3.end_flag": true},
                {"4.end_flag": true},
                {"5.end_flag": true},
                {"6.end_flag": true},
                {"7.end_flag": true},
                {"8.end_flag": true},
                {"9.end_flag": true},
                {"10.end_flag": true}
            ]
        }
    },
    // 统计符合条件的文档总数,添加该阶段即可
    {
        "$count": "matched_doc_count"
    }
]

方案2:未知X的取值、键名不固定

如果不确定文档下有多少个数字键、无法穷举的话,可以用$objectToArray把根文档的键值对转成数组,再判断数组中是否存在符合条件的元素:

[
    {
        "$match": {
            "$expr": {
                "$gt": [
                    {
                        "$size": {
                            "$filter": {
                                "input": {"$objectToArray": "$$ROOT"},
                                "cond": {"$eq": ["$$this.v.end_flag", true]}
                            }
                        }
                    },
                    0
                ]
            }
        }
    },
    {
        "$count": "matched_doc_count"
    }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:15:00