@Jason Cust вече го обясни доста добре - в тази ситуация често най-доброто решение е да промените схемата, за да предотвратите заявки Users
по свойства на документи, съхранявани в отделна колекция.
Ето най-доброто решение, за което се сещам, което обаче няма да ви принуди да го направите (защото казахте в коментара, че не можете).
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
});
});
Това, което правим тук, е да попълваме само email
s съответстваща допълнителна заявка (match
опция в .populate()
обаждане) - в противен случай email
поле в Users
документи ще бъдат зададени на null
.
Всичко, което остава, е .filter
на върнатите users
масив, както в първоначалния ви въпрос - само с много по-проста, много обща проверка. Както можете да видите - или email
има ли го или го няма.