Vì các mảng được lồng vào nhau nên bạn không thể sử dụng phép chiếu cơ bản như bạn có thể làm với find. Ngoài ra, để "lọc" nội dung mảng khỏi tài liệu, trước tiên bạn cần "giải nén" nội dung mảng. Đối với điều này, bạn sử dụng khung tổng hợp:
$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' )
))
));
Điểm của $ match
giai đoạn là giảm các tài liệu có thể phù hợp với tiêu chí của bạn. Lần thứ hai được thực hiện sau $ unwind
, nơi các mục "mảng" thực tế trong tài liệu được "lọc" khỏi kết quả.
$ group
cuối cùng
đặt mảng ban đầu trở lại bình thường, trừ đi các mục không phù hợp với tiêu chí.