@Jason Cust já expliquei muito bem - nesta situação, muitas vezes, a melhor solução é alterar o esquema para evitar a consulta de
Users
por propriedades de documentos armazenados em coleção separada. Aqui está a melhor solução que posso pensar que não o forçará a fazer isso (porque você disse no comentário que não pode).
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
});
});
O que estamos fazendo aqui é preencher apenas
email
s consulta adicional correspondente (match
opção em .populate()
call) - caso contrário email
campo em Users
documentos serão definidos como null
. Tudo o que resta é
.filter
em users
retornados array, como na sua pergunta original - apenas com uma verificação muito mais simples e genérica. Como você pode ver - o email
existe ou não.