Począwszy od MongoDB 3.2, możemy użyć $filter
operatora, aby skutecznie do tego. W $filtrze
wyrażenie warunkowe , musimy użyć $setIsSubset
operator, aby sprawdzić, czy dana wartość znajduje się w tablicy. Dzieje się tak głównie dlatego, że nie możemy użyć $in
operator zapytania w $project
scena.
db.collection.aggregate([
{ "$project": {
"list": {
"$filter": {
"input": "$list",
"as": "lst",
"cond": { "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] }
}
}
}}
])
Począwszy od MongoDB 3.0.x wstecz, potrzebujesz innego, mniej wydajnego podejścia przy użyciu $mapa
operator i $setDifference
operator.
db.collection.aggregate([
{ "$project": {
"list": {
"$setDifference": [
{ "$map": {
"input": "$list",
"as": "lst",
"in": {
"$cond": [
{ "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] },
"$$lst",
false
]
}
}},
[false]
]
}
}}
])