@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á.