sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB hittar kapslade objekt som uppfyller kriterierna

Eftersom arrayerna är kapslade kan du inte använda grundläggande projektion som du kan med find. Också för att "filtrera" matrisinnehållet från ett dokument måste du först "linda upp" matrisinnehållet. För detta använder du aggregeringsramverket:

   $results = $db->genealogical_data->aggregate(array(
       array( '$match' => array(
           'people.search_columns.givenname' => 'Valentine'
       )),
       array( '$unwind' => '$people' ),
       array( '$match' => array(
           'people.search_columns.givenname' => 'Valentine'
       )),
       array( '$group' => array(
           '_id' => '$id',
           'name' => array( '$first' => '$name' ),
           'people' => array( '$push' => '$people' )
       ))
   ));

Poängen med den första $match steget är att minska de dokument som eventuellt matchar dina kriterier. Den andra gången görs efter $unwind , där de faktiska "array"-objekten i dokumentet "filtreras" från resultaten.

Den sista $group återställer den ursprungliga arrayen till det normala, minus de objekt som inte matchar kriterierna.




  1. Slår samman två samlingar i MongoDB

  2. Finns det något sätt att få en GUI-representation av Mini Mongo?

  3. Konfigurera QueryDSL för Spring Data och MongoDB med Gradle

  4. Uppdatera ett dokumentfält i mongo baserat på ett annat fälts värde