A partir do MongoDB 3.2, podemos usar o
$filter
operador de forma eficiente para isso. Em $filter
's, precisamos usar o $setIsSubset
operador para verificar se um determinado valor está na matriz. Isso ocorre principalmente porque não podemos usar o $in
operador de consulta no $project
palco. db.collection.aggregate([
{ "$project": {
"list": {
"$filter": {
"input": "$list",
"as": "lst",
"cond": { "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] }
}
}
}}
])
Do MongoDB 3.0.x para trás, você precisa de uma abordagem diferente e menos eficiente usando o
$map
operador o e o $setDifference
operador. db.collection.aggregate([
{ "$project": {
"list": {
"$setDifference": [
{ "$map": {
"input": "$list",
"as": "lst",
"in": {
"$cond": [
{ "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] },
"$$lst",
false
]
}
}},
[false]
]
}
}}
])