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