@Jason Cust forklaret det ret godt allerede - i denne situation er den bedste løsning ofte at ændre skemaet for at forhindre forespørgsler på Users
ved egenskaber for dokumenter, der er gemt i særskilt samling.
Her er den bedste løsning, jeg kan komme i tanke om, der dog ikke vil tvinge dig til at gøre det (fordi du sagde i kommentaren, at du ikke 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 her, er kun at udfylde email
s matchende yderligere forespørgsel (match
mulighed i .populate()
opkald) - ellers email
felt i Users
dokumenter vil blive sat til null
.
Det eneste, der er tilbage, er .filter
på returnerede users
array, ligesom i dit oprindelige spørgsmål - kun med meget enklere, meget generisk check. Som du kan se - enten email
er der eller er det ikke.