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

Find efter befolke mangust

@Jason Cust forklaret det ret godt allerede - i denne situation er den bedste løsning ofte at ændre skemaet for at forhindre forespørgsler på Users ved egenskaber for dokumenter, der er gemt i særskilt samling.

Her er den bedste løsning, jeg kan komme i tanke om, der dog ikke vil tvinge dig til at gøre det (fordi du sagde i kommentaren, at du ikke kan).

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

Det, vi gør her, er kun at udfylde email s matchende yderligere forespørgsel (match mulighed i .populate() opkald) - ellers email felt i Users dokumenter vil blive sat til null .

Det eneste, der er tilbage, er .filter på returnerede users array, ligesom i dit oprindelige spørgsmål - kun med meget enklere, meget generisk check. Som du kan se - enten email er der eller er det ikke.



  1. Installation og kørsel af MongoDB på OSX

  2. Hvordan bruger man de dumpede data fra mongodump?

  3. RuntimeError:-ERR Ukendt kommando, der kører redis gem på Ruby

  4. Brug af flere Mongodb-databaser med Meteor.js