MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB trova oggetti nidificati che soddisfano i criteri

Poiché gli array sono nidificati, non è possibile utilizzare la proiezione di base come è possibile con find. Inoltre, per "filtrare" il contenuto dell'array da un documento è necessario prima "svolgere" il contenuto dell'array. Per questo usi il framework di aggregazione:

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

Il punto del primo $match fase è ridurre i documenti che potrebbero corrispondere ai tuoi criteri. La seconda volta viene eseguita dopo il $unwind , dove gli elementi "array" effettivi nel documento vengono "filtrati" dai risultati.

L'ultimo $group riporta l'array originale alla normalità, meno gli elementi che non corrispondono ai criteri.