MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Trova dopo popolare la mangusta

@Jason Cust l'ho già spiegato abbastanza bene - in questa situazione spesso la soluzione migliore è modificare lo schema per evitare di interrogare Users per proprietà dei documenti conservati in raccolta differenziata.

Ecco la soluzione migliore che mi viene in mente che non ti costringerà a farlo, però (perché nel commento hai detto che non puoi).

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

Quello che stiamo facendo qui è compilare solo email s corrispondente a una query aggiuntiva (match opzione in .populate() chiama) - altrimenti email campo in Users i documenti verranno impostati su null .

Tutto ciò che resta è .filter sugli users restituiti array, come nella tua domanda originale, solo con un controllo molto più semplice e molto generico. Come puoi vedere, l'email c'è o non c'è.