MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB trouve des objets imbriqués qui répondent aux critères

Étant donné que les tableaux sont imbriqués, vous ne pouvez pas utiliser la projection de base comme vous le pouvez avec find. De plus, pour "filtrer" le contenu du tableau d'un document, vous devez d'abord "dérouler" le contenu du tableau. Pour cela vous utilisez le framework d'agrégation :

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

Le point du premier $match consiste à réduire les documents qui correspondent éventuellement à vos critères. La deuxième fois est effectuée après le $unwind , où les éléments réels du "tableau" dans le document sont "filtrés" des résultats.

Le dernier $group remet le tableau d'origine à la normale, moins les éléments qui ne correspondent pas aux critères.