Тъй като масивите са вложени, не можете да използвате основна проекция, както можете с find. Също така, за да "филтрирате" съдържанието на масива от документ, трябва първо да "отвиете" съдържанието на масива. За това използвате рамката за агрегиране:
$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' )
))
));
Точката на първия $match
етапът е да намалите документите, които евентуално отговарят на вашите критерии. Вторият път се извършва след $unwindкод>
, където действителните елементи на "масив" в документа са "филтрирани" от резултатите.
Последният $group
връща оригиналния масив обратно към нормалното, минус елементите, които не отговарят на критериите.