sql >> Databasteknik >  >> NoSQL >> MongoDB

Hitta efter befolka mangust

@Jason Cust har redan förklarat det ganska bra - i den här situationen är ofta den bästa lösningen att ändra schemat för att förhindra att fråga Users genom egenskaper hos dokument som lagras i separat samling.

Här är den bästa lösningen jag kan komma på som dock inte kommer att tvinga dig att göra det (eftersom du sa i kommentaren att du inte 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 här är att bara fylla i email s matchande ytterligare fråga (match alternativet i .populate() samtal) - annars email fältet i Users dokument kommer att ställas in på null .

Allt som återstår är .filter på returnerade users array, som i din ursprungliga fråga - bara med mycket enklare, mycket generisk kontroll. Som du kan se - antingen email finns där eller inte.



  1. grails mongodb anslutning vägrade

  2. Skillnaden mellan MongoFactoryBean och SimpleMongoDbFactory

  3. Få ett dokument i MongoDB utan att ange insamling

  4. Hadoop Partitioner – Lär dig grunderna i MapReduce Partitioner