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

如何在MongoDB聚合的$regex中传入动态字符串引用

问题原因

$regex查询操作符默认只能接收静态字符串作为正则规则,你直接写的'$keyword'会被识别为普通文本内容,而不会取当前campaign文档的keyword字段值,所以匹配失效。

解决方案

MongoDB 4.2及以上版本可以通过 $lookup + let + $expr + $regexMatch 的组合实现动态字段引用的正则匹配,修改后的聚合管道如下:

[
  { 
    $match: { type: 'FOLLOWUP' } 
  },
  {
    $lookup: {
      from: 'orders',
      // 声明要从父级campaign文档传入子管道的字段
      let: { campaignKeyword: '$keyword' },
      as: 'orders',
      pipeline: [
        {
          $match: {
            $expr: {
              $regexMatch: {
                // 匹配orders集合的title字段
                input: '$title',
                // 引用父级传入的keyword变量,需要加$$前缀
                regex: '$$campaignKeyword',
                options: 'i'
              }
            }
          }
        }
      ]
    }
  }
]

注意事项

  • 父文档的字段必须先在$lookup的let参数中定义,才能在子管道中通过$$变量名的方式引用
  • 只有在$expr中使用聚合运算符$regexMatch,才支持动态传入正则内容,普通$regex查询不支持字段引用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:45:02