Vanaf MongoDB 3.2 kunnen we de $filter
operator om hier efficiënt op in te spelen. In $filter
's voorwaardelijke expressie moeten we de $setIsSubset
operator om te controleren of een bepaalde waarde in de array staat. Dit komt voornamelijk omdat we de $in
query-operator in de $project
podium.
db.collection.aggregate([
{ "$project": {
"list": {
"$filter": {
"input": "$list",
"as": "lst",
"cond": { "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] }
}
}
}}
])
Vanaf MongoDB 3.0.x heb je een andere, minder efficiënte aanpak nodig met de $map
operator de en de $setDifference
exploitant.
db.collection.aggregate([
{ "$project": {
"list": {
"$setDifference": [
{ "$map": {
"input": "$list",
"as": "lst",
"in": {
"$cond": [
{ "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] },
"$$lst",
false
]
}
}},
[false]
]
}
}}
])