sql >> Databáze >  >> NoSQL >> MongoDB

Vyberte Odpovídající prvek pole a Vraťte vybraná pole

Pokud chcete vybrat pouze určitá pole pole, která se mají vrátit, pak mluvíte o „přetvoření“ dokumentu. Pro cokoli nad rámec „základního“ výběru pole to znamená použití .aggregate() jako metoda namísto .find() .

Zde jsou tedy dva požadavky:$filter na obsahu pole, aby se „srovnal“ a vrátil, stejně jako $map skutečná "pole k návratu" ze samotného pole:

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

Zde $filter se používá k redukci obsahu pole pouze na ty, které odpovídají podmínce. Jsou to ty, které mají stejné "name" vlastnost jako hodnotu "def" . Toto je pak předáno jako "input" parametr na $map .

$map Operátor funguje stejně jako jeho protějšky v jiných jazycích v tom, že "přetváří pole" tak, aby vrátilo něco podle toho, co zadáte v "in" parametr. Takže zde ve skutečnosti pouze explicitně pojmenujeme vlastnosti a použijeme tam přiřazení proměnných pro aktuální prvek pole, který se zpracovává, takže to jsou to, co se vrátí jako "nový" obsah pole.

Celkovým výsledkem je pole obsahující:

  1. Pouze položky odpovídající zadaným podmínkám.
  2. Pouze pole, která se mají vrátit.



  1. Třída MongoClient vs. třída MongoDB\Driver\Manager

  2. Příklad volání AJAX do/z MongoDB pro Node/Express?

  3. Jak se připojit k instanci Redis (memorystore) ze standardního App Engine společnosti Google (Python 3.7)

  4. mongoDB:$inc neexistujícího dokumentu v poli