如何在 mongodb 聚合中将动态字符串传递给 $regex

How a pass a dynamic string to $regex in mongodb aggregation

我有两个集合,一个是活动,另一个是订单。我必须过滤每个广告系列的订单。所以我正在做的是获取所有活动,然后查找符合某些特定条件的订单。

[
 { 
   $match: { type: 'FOLLOWUP' } 
 },
 {
   $lookup: {
     from: 'orders',
     as: 'orders',
     pipeline: [
       {
          $match: {
             'title': { $regex: '$keyword', $options: 'i' },
          }
       }
     ]
   }
 }
]

在上面的示例中,每个广告系列都包含一个类型为 stringkeyword 字段。因此,我必须为每个在 title 中包含 keyword 的广告系列过滤所有订单,并且每个广告系列都有不同的关键字。我如何传递对 $regex 的动态引用,如果我使用的是硬编码字符串,它工作正常,但对于传递引用 ('$keyword') 它不起作用。

如有任何帮助,我们将不胜感激。

你可以试试$regexMatch聚合表达式运算符,

  • letkeyword 从活动集合传递到查找
  • $regexMatch 聚合表达式运算符将输入作为 title 传递,正则表达式作为来自 letkeyword 引用使用 $$ 符号
[
  { $match: { type: "FOLLOWUP" } },
  {
    $lookup: {
      from: "orders",
      as: "orders",
      let: { keyword: "$keyword" },
      pipeline: [
        {
          $match: {
            $expr: {
              $regexMatch: {
                input: "$title",
                regex: "$$keyword",
                options: "i"
              }
            }
          }
        }
      ]
    }
  }
]

Playground