MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Finden Sie nach Mungo bevölkern

@Jason Cust hat es schon ziemlich gut erklärt - in dieser Situation ist es oft die beste Lösung, das Schema zu ändern, um zu verhindern, dass Users abgefragt werden nach Eigenschaften von Dokumenten, die in einer separaten Sammlung gespeichert sind.

Hier ist die beste Lösung, die mir einfällt, die Sie jedoch nicht dazu zwingt (weil Sie in dem Kommentar gesagt haben, dass Sie das nicht können).

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

Wir füllen hier nur email aus s übereinstimmende Zusatzabfrage (match Option in .populate() anrufen) - ansonsten email Feld in Users Dokumente werden auf null gesetzt .

Alles, was übrig bleibt, ist .filter auf zurückgegebene users array, wie in Ihrer ursprünglichen Frage - nur mit viel einfacherer, sehr allgemeiner Prüfung. Wie Sie sehen können - entweder die email vorhanden ist oder nicht.