@Jason Cust legde het al vrij goed uit - in deze situatie is de beste oplossing vaak om het schema te wijzigen om te voorkomen dat Users
wordt ondervraagd door eigenschappen van documenten die zijn opgeslagen in een aparte verzameling.
Dit is de beste oplossing die ik kan bedenken die je echter niet zal dwingen om dat te doen (omdat je in de opmerking zei dat je dat niet kunt).
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
});
});
Wat we hier doen, is alleen email
s komt overeen met aanvullende zoekopdracht (match
optie in .populate()
bellen) - anders email
veld in Users
documenten worden ingesteld op null
.
Het enige dat overblijft is .filter
op geretourneerde users
array, zoals in uw oorspronkelijke vraag - alleen met een veel eenvoudigere, zeer algemene controle. Zoals je kunt zien - ofwel de email
is er of is het niet.