Ab MongoDB 3.2 können wir den $filter
Betreiber effizient dazu. In
$filter
's Bedingungsausdruck müssen wir den $setIsSubset
-Operator, um zu prüfen, ob ein bestimmter Wert im Array enthalten ist. Dies liegt hauptsächlich daran, dass wir den
$in
Abfrageoperator im
$project
Stufe.
db.collection.aggregate([
{ "$project": {
"list": {
"$filter": {
"input": "$list",
"as": "lst",
"cond": { "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] }
}
}
}}
])
Ab MongoDB 3.0.x rückwärts benötigen Sie einen anderen, weniger effizienten Ansatz mit $map
Operator the und the $setDifference
Operator.
db.collection.aggregate([
{ "$project": {
"list": {
"$setDifference": [
{ "$map": {
"input": "$list",
"as": "lst",
"in": {
"$cond": [
{ "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] },
"$$lst",
false
]
}
}},
[false]
]
}
}}
])