Agak terlambat ke pesta, tapi semoga bisa membantu orang lain yang sedang mencari solusi. Saya telah menemukan cara untuk melakukan ini menggunakan kerangka kerja agregasi dan menggabungkan $project dan $unwind dengan $match, dengan menyatukannya. Saya sudah melakukannya menggunakan PHP tetapi Anda harus mendapatkan intinya:
$ops = array(
array('$match' => array(
'collectionColumn' => 'value',
)
),
array('$project' => array(
'collection.subcollection' => 1
)
),
array('$unwind' => '$subCollection'),
array('$match' => array(
subCollection.subColumn => 'subColumnValue'
)
)
);
Pertandingan dan proyek pertama hanya digunakan untuk menyaring agar lebih cepat, kemudian pelepasan pada subkoleksi mengeluarkan setiap subkoleksi item demi item yang kemudian dapat disaring menggunakan pencocokan terakhir.
Semoga membantu.
PEMBARUAN (dari Ryan Wheale):
Anda kemudian dapat $group
data kembali ke struktur aslinya. Ini seperti memiliki $elemMatch
yang mengembalikan lebih dari satu subdokumen:
array('$group' => array(
'_id' => '$_id',
'subcollection' => array(
'$push' => '$subcollection'
)
)
);
Saya menerjemahkan ini dari Node ke PHP, jadi saya belum mengujinya di PHP. Jika ada yang menginginkan versi Node, tinggalkan komentar di bawah dan saya akan membantu.