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

Sélectionner l'élément de tableau correspondant et renvoyer les champs sélectionnés

Si vous souhaitez uniquement sélectionner certains champs d'un tableau à renvoyer, vous parlez de "remodeler" le document. Pour tout ce qui va au-delà de la sélection de champ "de base", cela signifie utiliser .aggregate() comme méthode au lieu de .find() .

Donc, les deux exigences ici sont de $filter sur le contenu du tableau pour "faire correspondre" et retourner, ainsi que $map les "champs à renvoyer" réels du tableau lui-même :

User.aggregate([
  { "$match": { "children.name": "def" } },
  { "$project": {
     "name": 1,
     "children": {
       "$map": {
         "input": {
           "$filter": {
             "input": "$children",
             "as": "c",
             "cond": { "$eq": [ "$$c.name", "def" ] } 
           }
         },
         "as": "c",
         "in": {
           "age": "$$c.age",
           "height": "$$c.height"
         }
       }
     }
  }}
])

Ici $filter est utilisé pour réduire le contenu du tableau à ceux qui correspondent à la condition. Être ceux qui ont le même "name" propriété comme valeur "def" . Ceci est ensuite passé comme "input" paramètre à$map .

Le $map L'opérateur fonctionne comme ses homologues d'autres langages en ce sens qu'il "reforme les tableaux" pour renvoyer quelque chose en fonction de ce que vous spécifiez dans le "in" paramètre. Donc, ici, nous ne nommons explicitement que les propriétés et n'utilisons que les affectations de variables pour l'élément de tableau en cours de traitement afin qu'elles soient renvoyées en tant que "nouveau" contenu de tableau.

Le résultat global est un tableau contenant :

  1. Seulement les éléments correspondant aux conditions spécifiées.
  2. Seulement les champs spécifiés à renvoyer.