@Jason Cust sudah menjelaskannya dengan cukup baik - dalam situasi ini seringkali solusi terbaik adalah mengubah skema untuk mencegah kueri Users berdasarkan properti dokumen yang disimpan dalam koleksi terpisah.
Inilah solusi terbaik yang dapat saya pikirkan yang tidak akan memaksa Anda untuk melakukan itu (karena Anda mengatakan dalam komentar bahwa Anda tidak bisa).
Users.find().populate({
path: 'email',
match: {
type: 'Gmail'
}
}).exec(function(err, users) {
users = users.filter(function(user) {
return user.email; // return only users with email matching 'type: "Gmail"' query
});
});
Apa yang kami lakukan di sini hanya mengisi email s pencocokan kueri tambahan (match opsi di .populate() panggilan) - jika tidak email bidang di Users dokumen akan disetel ke null .
Yang tersisa hanyalah .filter pada users . yang dikembalikan array, seperti dalam pertanyaan awal Anda - hanya dengan pemeriksaan yang lebih sederhana dan sangat umum. Seperti yang Anda lihat - baik email ada atau tidak.