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

Posted

技术标签:

【中文标题】如何在 mongodb 聚合中将动态字符串传递给 $regex【英文标题】:How a pass a dynamic string to $regex in mongodb aggregation 【发布时间】:2021-11-24 05:04:31 【问题描述】:

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

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

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

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

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

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

Playground

【讨论】:

以上是关于如何在 mongodb 聚合中将动态字符串传递给 $regex的主要内容,如果未能解决你的问题,请参考以下文章

如何在节点js中将变量名作为mongodb的集合名称传递

MongoDB,分组,聚合

如何在 ReactJS 中将更改的状态从子组件传递给其父组件

如何在VueJS中将动态鼠标滚动值作为道具传递

mongodb 分组聚合查询

如何使用MongoDB聚合进行分页?