Mongodb Trouver ou agréger correspondant à un objet à l'intérieur d'un tableau d'un document

StackOverflow https://stackoverflow.com//questions/25045481

  •  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 {marque: "bosh", type: "frigo"} && {type: "congélateur", couleur: "blanc"} outoute autre combinaison des balises.Est-ce possible à Mongo?Comment puis-je faire cela ou y a-t-il une bonne explication quelque part qui explique cela?

{
"_id" : ObjectId("53bd7837156aa38914f55176"),
"user_id" : "53bd1a0d237e7d44120a51d1",
"tags" : [ 
    {
        "brand" : "bosch",
        "type" : "fridge",
        "color" : "black"
    }, 
    {
        "brand" : "electrolux",
        "type" : "freezer",
        "color" : "white"
    }
]
}

Était-ce utile?

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"
        }
    ]
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top