sql >> Database teknologi >  >> NoSQL >> MongoDB

Vælg Matching Array Element og Returner valgte felter

Hvis du kun vil vælge bestemte felter i et array, der skal returneres, taler du om at "omforme" dokumentet. For alt andet end "grundlæggende" feltvalg betyder det brug af .aggregate() som metoden i stedet for .find() .

Så de to krav her er at $filter på matrixindholdet for at "matche" og returnere, samt $map de faktiske "felter, der skal returneres" fra selve arrayet:

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

Her $filter bruges til at reducere indholdet af arrayet til kun dem, der matcher betingelsen. At være dem, der har det samme "name" egenskab som værdien "def" . Dette sendes derefter som "input" parameter til$map .

$map operator fungerer ligesom det er andre sproglige modstykker, idet den "omformer arrays" for at returnere noget i henhold til det, du angiver i "in" parameter. Så her navngiver vi faktisk kun egenskaberne eksplicit og bruger variable tildelinger for det aktuelle array-element, der behandles, så det er det, der returneres som det "nye" array-indhold.

Det overordnede resultat er et array, der indeholder:

  1. Kun de varer, der matcher de angivne betingelser.
  2. Kun de felter, der var angivet til at returnere.



  1. Opret et 2dsphere Geospatial Index for sfæriske forespørgsler i MongoDB

  2. Mongoose findOneAndUpdate Upsert _id null?

  3. MongoDB opdaterer array-objekt i et array

  4. Hvordan finder man de nærmeste par (Hamming Distance) af en streng af binære bins i Ruby uden O^2-problemer?