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

MongoDB hledá vnořené objekty, které splňují kritéria

Protože jsou pole vnořená, nemůžete použít základní projekci jako u find. Abyste mohli „filtrovat“ obsah pole z dokumentu, musíte nejprve „rozvinout“ obsah pole. K tomu použijete agregační rámec:

   $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' )
       ))
   ));

Pointa prvního $match fázi je zredukovat dokumenty, které mohou odpovídat vašim kritériím. Podruhé se provede po $unwind , kde jsou skutečné položky "pole" v dokumentu "filtrovány" z výsledků.

Poslední $group vrátí původní pole zpět do normálu, mínus položky, které neodpovídají kritériím.




  1. Jak otestovat celer s django na počítači se systémem Windows

  2. Odebrání vnořeného dokumentu z pole v MongodDB

  3. Spring MongoItemReader nečte všechny záznamy při jednom spuštění

  4. mongodb $not _id