J'ai un tableau dans un sous-document comme ceci
{
"_id" : ObjectId("512e28984815cbfcb21646a7"),
"list" : [
{
"a" : 1
},
{
"a" : 2
},
{
"a" : 3
},
{
"a" : 4
},
{
"a" : 5
}
]
}
Puis-je filtrer un sous-document pour un > 3
Le résultat que j'attends est le suivant
{
"_id" : ObjectId("512e28984815cbfcb21646a7"),
"list" : [
{
"a" : 4
},
{
"a" : 5
}
]
}
J'essaie d'utiliser $elemMatch
mais renvoie le premier élément correspondant dans le tableau
Ma question :
db.test.find( { _id" : ObjectId("512e28984815cbfcb21646a7") }, {
list: {
$elemMatch:
{ a: { $gt:3 }
}
}
} )
Le résultat renvoie un élément dans le tableau
{ "_id" : ObjectId("512e28984815cbfcb21646a7"), "list" : [ { "a" : 4 } ] }
et j'essaie d'utiliser l'agrégat avec $match
mais ne fonctionne pas
db.test.aggregate({$match:{_id:ObjectId("512e28984815cbfcb21646a7"), 'list.a':{$gte:5} }})
Il retourne tous les éléments du tableau
{
"_id" : ObjectId("512e28984815cbfcb21646a7"),
"list" : [
{
"a" : 1
},
{
"a" : 2
},
{
"a" : 3
},
{
"a" : 4
},
{
"a" : 5
}
]
}
Puis-je filtrer les éléments du tableau pour obtenir le résultat attendu ?