如何在 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"]
}
}
我有两个集合,一个是活动,另一个是订单。 我必须过滤每个广告系列的订单。所以我正在做的是获取所有活动,然后查找符合某些特定条件的订单。
[
{
$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"]
}
}