@Jason Cust har redan förklarat det ganska bra - i den här situationen är ofta den bästa lösningen att ändra schemat för att förhindra att fråga Users
genom egenskaper hos dokument som lagras i separat samling.
Här är den bästa lösningen jag kan komma på som dock inte kommer att tvinga dig att göra det (eftersom du sa i kommentaren att du inte kan).
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
});
});
Det vi gör här är att bara fylla i email
s matchande ytterligare fråga (match
alternativet i .populate()
samtal) - annars email
fältet i Users
dokument kommer att ställas in på null
.
Allt som återstår är .filter
på returnerade users
array, som i din ursprungliga fråga - bara med mycket enklare, mycket generisk kontroll. Som du kan se - antingen email
finns där eller inte.