A partir de MongoDB 3.2, podemos usar el $filter
operador a eficientemente a esto. En $filter
Para la expresión condicional, necesitamos usar el $setIsSubset
operador para verificar si un valor dado está en la matriz. Esto se debe principalmente a que no podemos usar el $in
operador de consulta en el $project
escenario.
db.collection.aggregate([
{ "$project": {
"list": {
"$filter": {
"input": "$list",
"as": "lst",
"cond": { "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] }
}
}
}}
])
Desde MongoDB 3.0.x hacia atrás, necesita un enfoque diferente y menos eficiente utilizando $map
operador el y el $setDifference
operador.
db.collection.aggregate([
{ "$project": {
"list": {
"$setDifference": [
{ "$map": {
"input": "$list",
"as": "lst",
"in": {
"$cond": [
{ "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] },
"$$lst",
false
]
}
}},
[false]
]
}
}}
])