À partir de MongoDB 3.2, nous pouvons utiliser le $filter
l'opérateur pour y parvenir efficacement. Dans $filter
Nous devons utiliser l'expression conditionnelle de $setIsSubset
opérateur pour vérifier si une valeur donnée est dans le tableau. C'est principalement parce que nous ne pouvons pas utiliser le $in
opérateur de requête dans le $project
scène.
db.collection.aggregate([
{ "$project": {
"list": {
"$filter": {
"input": "$list",
"as": "lst",
"cond": { "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] }
}
}
}}
])
À partir de MongoDB 3.0.x, vous avez besoin d'une approche différente et moins efficace en utilisant $map
opérateur le et le $setDifference
opérateur.
db.collection.aggregate([
{ "$project": {
"list": {
"$setDifference": [
{ "$map": {
"input": "$list",
"as": "lst",
"in": {
"$cond": [
{ "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] },
"$$lst",
false
]
}
}},
[false]
]
}
}}
])