@Jason Cust wyjaśniłem to już całkiem dobrze - w takiej sytuacji często najlepszym rozwiązaniem jest zmiana schematu, aby zapobiec zapytaniom Users
według właściwości dokumentów przechowywanych w oddzielnej kolekcji.
Oto najlepsze rozwiązanie, jakie przychodzi mi do głowy, które jednak nie zmusi Cię do tego (ponieważ powiedziałeś w komentarzu, że nie możesz).
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
});
});
To, co tutaj robimy, to wypełnianie tylko email
s pasujące do dodatkowego zapytania (match
opcja w .populate()
zadzwoń) - w przeciwnym razie email
pole w Users
dokumenty zostaną ustawione na null
.
Pozostało tylko .filter
na zwróconych users
tablica, jak w pierwotnym pytaniu - tylko ze znacznie prostszym, bardzo ogólnym sprawdzeniem. Jak widać - albo email
jest lub nie ma.