@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.