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

MongoDB使用$aggregate和$filter筛选data数组中国区任务结果不符合预期

MongoDB聚合查询问题排查及修复

问题根因

你写的聚合语句有两个核心错误导致过滤后data数组为空:

  • 变量引用错误:$filter中通过as: 'data'定义了遍历数组时的单元素变量名,引用该变量需要加双美元符$$,你写的$data.TASKLIST实际是引用根文档的整个data数组,不是当前遍历的单个元素属性。
  • 匹配运算符错误:$eq运算符不支持正则表达式匹配,用$eq直接对比字符串和正则永远返回false,正则匹配需要使用$regexMatch运算符。

修正后的聚合代码

db = db.getSiblingDB("quantum-ingress");
db.getCollection("ingressPayload").aggregate(
    [
        { 
            $match : { 
                'schemaVersion' : 'task', 
                'data.TASKLIST' : /.*China.*/i, 
                'timestamp' : { '$gt' : ISODate("2021-08-01T00:00:19.000+0000") }
            }
        }, 
        {
            $project:{ 
                data:{
                    $filter:{
                        input:'$data',
                        as: 'data',
                        cond: {
                            $regexMatch: {
                                input: '$$data.TASKLIST',
                                regex: /.*China.*/i
                            }
                        }
                    }
                }
            }
        },
        // 可选:如果需要过滤掉过滤后data为空的文档,保留上面匹配阶段命中的、且过滤后仍有有效元素的文档,可加下面这一层
        {
            $match: {
                data: { $ne: [] }
            }
        }
    ]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:27:03