Започвайки от MongoDB 3.2, можем да използваме $filterкод>
операторът да се справи ефективно с това. В $filter
условен израз на трябва да използваме $setIsSubsetкод>
оператор за проверка дали дадена стойност е в масива. Това е главно защото не можем да използваме $inкод>
оператор на заявка в $project
етап.
db.collection.aggregate([
{ "$project": {
"list": {
"$filter": {
"input": "$list",
"as": "lst",
"cond": { "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] }
}
}
}}
])
От MongoDB 3.0.x назад се нуждаете от различен, по-малко ефективен подход, като използвате $map
оператор the и $setDifference
оператор.
db.collection.aggregate([
{ "$project": {
"list": {
"$setDifference": [
{ "$map": {
"input": "$list",
"as": "lst",
"in": {
"$cond": [
{ "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] },
"$$lst",
false
]
}
}},
[false]
]
}
}}
])