Mongodb Trouver ou agréger correspondant à un objet à l'intérieur d'un tableau d'un document
-
21-12-2019 - |
Question
J'essaie de comprendre comment je peux rechercher tous les documents qui ont la même combinaison de "tags" comme le document suivant.
Ce qui signifie que je voudrais trouver tous les documents qui ont des tags
{
"_id" : ObjectId("53bd7837156aa38914f55176"),
"user_id" : "53bd1a0d237e7d44120a51d1",
"tags" : [
{
"brand" : "bosch",
"type" : "fridge",
"color" : "black"
},
{
"brand" : "electrolux",
"type" : "freezer",
"color" : "white"
}
]
}
La solution
Vous devez utiliser $ elemmatch opérateur pour correspondre au sous-documentet $ tout opérateur pour combiner plusieurs opérateurs $ ELEMMMatch:
db.coll.find({
"tags" : {
"$all" : [
{"$elemMatch" : {"brand": "bosch", "type" : "fridge"}},
{"$elemMatch" : {"type": "freezer", "color": "white"}}
]
}
});
Cette requête trouvera tous les documents contenant des sous-documents qui ont des valeurs spécifiées dans les deux champs (c'est-à-dire la marque && type et le type && couleur).
Le document suivant sera non correspond à la requête ci-dessus (remarquez que la valeur des champs de type est inversée):
{
...
"tags" : [
{
"brand" : "bosch",
"type" : "freezer"
},
{
"brand" : "electrolux",
"type" : "fridge"
}
]
}