MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Encontrar depois de povoar mangusto


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