I have two collections 1 is campaigns and other is orders. I have to filter orders for each campaign. So what I am doing is that I'm fetching all the campaigns and after that I'm looking up for the orders that matches some specific criteria.
[
{
$match: { type: 'FOLLOWUP' }
},
{
$lookup: {
from: 'orders',
as: 'orders',
pipeline: [
{
$match: {
'status': { $in: '$activeFilter' }
}
}
]
}
}
]
In above example status contain some specific string and the activeFilter has array of string containing active status for that campaign. activeFilter is an array but I'm getting error that $in needs an array.
Any help would be appreciated.
CodePudding user response:
I assume activeFilter is not always an array. To make it dynamic try
{
$match: {
'status': { $in: {$cond: {
if: { $isArray: '$activeFilter' },
then: '$activeFilter',
else: ['$activeFilter'] ]
} }
}
}
CodePudding user response:
You are using Aggregation pipeline, and $in operator does not work the same in find() query and in Aggregation pipeline. In Aggregation pipeline, syntax is as follow:
{ $in: [ <expression>, <array expression> ] }
So, $in should have 2 parameters where value is the first one, and array is the second one. You should change your code like this:
"$match": {
"$expr": {
"$in": ["$status", "$activeFilter"]
}
}
