A partire da MongoDB 3.2, possiamo utilizzare $filter
operatore in modo efficiente a questo. In $filter
dell'espressione condizionale dobbiamo usare $setIsSubset
operatore per verificare se un determinato valore è nell'array. Ciò è dovuto principalmente al fatto che non possiamo utilizzare $in
operatore di query nel $project
fase.
db.collection.aggregate([
{ "$project": {
"list": {
"$filter": {
"input": "$list",
"as": "lst",
"cond": { "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] }
}
}
}}
])
A partire da MongoDB 3.0.x è necessario un approccio diverso e meno efficiente utilizzando $map
operatore the e $setDifference
operatore.
db.collection.aggregate([
{ "$project": {
"list": {
"$setDifference": [
{ "$map": {
"input": "$list",
"as": "lst",
"in": {
"$cond": [
{ "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] },
"$$lst",
false
]
}
}},
[false]
]
}
}}
])