Fra MongoDB 3.2 kan vi bruge $filter
operatør til effektivt at gøre dette. I $filter
s betingede udtryk skal vi bruge $setIsSubset
operatør for at kontrollere, om en given værdi er i arrayet. Dette skyldes primært, at vi ikke kan bruge $in
forespørgselsoperator i $projekt
scene.
db.collection.aggregate([
{ "$project": {
"list": {
"$filter": {
"input": "$list",
"as": "lst",
"cond": { "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] }
}
}
}}
])
Fra MongoDB 3.0.x og baglæns har du brug for en anden, mindre effektiv tilgang ved at bruge $map
operatoren og $setDifference
operatør.
db.collection.aggregate([
{ "$project": {
"list": {
"$setDifference": [
{ "$map": {
"input": "$list",
"as": "lst",
"in": {
"$cond": [
{ "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] },
"$$lst",
false
]
}
}},
[false]
]
}
}}
])