MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Requête MongoDB avec elemMatch pour les données de tableau imbriquées

Votre requête renvoie simplement tous les documents contenant un modules élément où name == 'foo' . Pour utiliser $elemMatch pour filtrer la sortie, vous devez l'utiliser dans l'argument de projection du find appeler au lieu d'une partie de la requête :

db.test.find({}, {modules: {$elemMatch: {name: 'foo'}}})

Pour combiner les deux concepts, vous pouvez référencer l'index de l'élément de tableau correspondant dans la requête avec $ :

db.test.find({modules: {$elemMatch: {name: 'foo'}}}, {'modules.$': 1})

Dans les deux cas, cela renvoie :

{
  "_id": ObjectId("..."),
  "modules": [
    {
      "name": "foo",
      "mandatory": false,
      "group": [
        {
          "name": "g1"
        }
      ]
    }
  ]
}

Si vous avez besoin d'autres champs inclus dans la sortie, ajoutez-les à l'objet de projection (par exemple, name: 1 ).