MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Trouver après peupler la mangouste

@Jason Cust l'a déjà assez bien expliqué - dans cette situation, la meilleure solution consiste souvent à modifier le schéma pour éviter d'interroger les Users par propriétés des documents stockés dans une collection séparée.

Voici la meilleure solution à laquelle je peux penser qui ne vous obligera pas à le faire (parce que vous avez dit dans le commentaire que vous ne pouvez pas).

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
  });
});

Ce que nous faisons ici, c'est remplir uniquement email s correspondant à une requête supplémentaire (match option dans .populate() call) - sinon email champ dans Users les documents seront définis sur null .

Tout ce qui reste est .filter sur les users renvoyés tableau, comme dans votre question initiale - uniquement avec une vérification beaucoup plus simple et très générique. Comme vous pouvez le voir - soit le email est là ou il n'y en a pas.