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

标签 node.js mongodb aggregation-framework aggregate 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

关于node.js - 如何在mongodb聚合中将动态值传递给$in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69419676/

相关文章:

node.js - 仅当关键存在时更新 firebase 云功能

javascript - Phonegap不会从mongodb(mongolab)中删除数据

mongodb - 如何使用 MongoDB 将 `$lookup` 聚合为 `findOne()`

java - Mongodb java驱动程序使用二进制_id查询

mongodb - 如何使用 aggregate 按半小时分组并四舍五入?

mongodb - 如何在 mongodb 聚合中使用 $geoNear 和 $lookup

javascript - 如何合并和求和 MongoDB 的结果

javascript - While 在 Promise 的 .then() 内循环

javascript - 返回某种类型的有限数量的记录,但返回无限数量的其他记录?

node.js - 引用错误: number is not defined in MEAN