Počínaje MongoDB 3.2 můžeme použít $filter
operátora k tomu efektivně. V $filter
Podmíněný výraz 's musíme použít $setIsSubset
operátor pro kontrolu, zda je daná hodnota v poli. Je to hlavně proto, že nemůžeme použít $in
operátor dotazu v $project
fázi.
db.collection.aggregate([
{ "$project": {
"list": {
"$filter": {
"input": "$list",
"as": "lst",
"cond": { "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] }
}
}
}}
])
Od MongoDB 3.0.x zpětně potřebujete jiný, méně účinný přístup pomocí $map
operátor the a $setDifference
operátor.
db.collection.aggregate([
{ "$project": {
"list": {
"$setDifference": [
{ "$map": {
"input": "$list",
"as": "lst",
"in": {
"$cond": [
{ "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] },
"$$lst",
false
]
}
}},
[false]
]
}
}}
])