MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB findet verschachtelte Objekte, die die Kriterien erfüllen

Da die Arrays verschachtelt sind, können Sie die einfache Projektion nicht wie bei find verwenden. Auch um den Array-Inhalt aus einem Dokument zu "filtern", müssen Sie den Array-Inhalt zuerst "auflösen". Dazu verwenden Sie das Aggregationsframework:

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

Der Punkt des ersten $match Phase ist es, die Dokumente zu reduzieren, die möglicherweise Ihren Kriterien entsprechen. Das zweite Mal erfolgt nach dem $unwind , wo die tatsächlichen "Array"-Elemente im Dokument aus den Ergebnissen "gefiltert" werden.

Der letzte $group setzt das ursprüngliche Array wieder auf normal, abzüglich der Elemente, die nicht den Kriterien entsprechen.