sql >> Database >  >> NoSQL >> MongoDB

MongoDB vindt geneste objecten die aan de criteria voldoen

Omdat de arrays genest zijn, kun je geen basisprojectie gebruiken zoals je kunt met find. Om de array-inhoud van een document te "filteren" moet u eerst de array-inhoud "afwikkelen". Hiervoor gebruik je het aggregatieraamwerk:

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

Het punt van de eerste $match stap is het verminderen van de documenten die mogelijk aan uw criteria voldoen. De tweede keer wordt gedaan na de $unwind , waarbij de werkelijke "array"-items in het document worden "gefilterd" uit de resultaten.

De laatste $group zet de originele array terug naar normaal, minus de items die niet aan de criteria voldoen.




  1. MongoDB geaggregeerde retourtelling van 0 als er geen resultaten zijn

  2. Transformeer keymap naar vector met behulp van MongoDB-framework

  3. Meerdere Redis-instanties

  4. Hoe te aggregeren op enorme array in mongoDB?