如何在 mongodb 聚合中将动态值传递给 $in

how to pass dynamic value to $in in mongodb aggregation

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

[
     { 
       $match: { type: 'FOLLOWUP' } 
     },
     {
       $lookup: {
         from: 'orders',
         as: 'orders',
         pipeline: [
           {
              $match: {
                 'status': { $in: '$activeFilter' }
              }
           }
         ]
       }
     }
]

在上面的示例中,status 包含一些特定的字符串,而 activeFilter 具有包含该活动活动状态的字符串数组。 activeFilter 是一个数组,但我收到错误提示 $in 需要一个数组。

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

您正在使用聚合管道,$in 运算符在 find() 查询和聚合管道中的工作方式不同。在聚合管道中,语法如下:

{ $in: [ <expression>, <array expression> ] }

所以,$in 应该有 2 个参数,其中 value 是第一个,array 是第二个。您应该像这样更改您的代码:

"$match": {
  "$expr": {
    "$in": ["$status", "$activeFilter"]
  }
}

Working example