@Jason Cust Ya lo expliqué bastante bien:en esta situación, a menudo la mejor solución es modificar el esquema para evitar consultar a Users por propiedades de documentos almacenados en colección separada.
Sin embargo, esta es la mejor solución que se me ocurre que no te obligará a hacer eso (porque dijiste en el comentario que no puedes).
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
});
});
Lo que estamos haciendo aquí es completar solo email consulta adicional coincidente (match opción en .populate() llamar) - de lo contrario email campo en Users los documentos se establecerán en null .
Todo lo que queda es .filter en users devueltos matriz, como en su pregunta original, solo con una verificación mucho más simple y genérica. Como puede ver, el email está ahí o no está.