sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB encuentra objetos anidados que cumplen con los criterios

Dado que las matrices están anidadas, no puede usar la proyección básica como puede hacerlo con find. Además, para "filtrar" el contenido de la matriz de un documento, primero debe "desenrollar" el contenido de la matriz. Para ello, utiliza el marco de agregación:

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

El punto del primer $match etapa es reducir los documentos que posiblemente coincidan con sus criterios. La segunda vez se realiza después de $unwind , donde los elementos reales de la "matriz" en el documento se "filtran" de los resultados.

El $group final devuelve la matriz original a la normalidad, menos los elementos que no coinciden con los criterios.