sql >> Base de Datos >  >> NoSQL >> MongoDB

Buscar después de poblar mangosta

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