MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB encontrando objetos aninhados que atendem aos critérios


Como as matrizes são aninhadas, você não pode usar a projeção básica como pode com find. Além disso, para "filtrar" o conteúdo da matriz de um documento, você precisa "desenrolar" o conteúdo da matriz primeiro. Para isso você usa o framework de agregação:
   $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' )
       ))
   ));

O ponto do primeiro $match etapa é reduzir os documentos que possivelmente atendem aos seus critérios. A segunda vez é feita após o $unwind , onde os itens de "matriz" reais no documento são "filtrados" dos resultados.

O $group final coloca a matriz original de volta ao normal, menos os itens que não correspondem aos critérios.