sql >> Database >  >> NoSQL >> MongoDB

Zoek na het bevolken mangoest

@Jason Cust legde het al vrij goed uit - in deze situatie is de beste oplossing vaak om het schema te wijzigen om te voorkomen dat Users wordt ondervraagd door eigenschappen van documenten die zijn opgeslagen in een aparte verzameling.

Dit is de beste oplossing die ik kan bedenken die je echter niet zal dwingen om dat te doen (omdat je in de opmerking zei dat je dat niet kunt).

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

Wat we hier doen, is alleen email s komt overeen met aanvullende zoekopdracht (match optie in .populate() bellen) - anders email veld in Users documenten worden ingesteld op null .

Het enige dat overblijft is .filter op geretourneerde users array, zoals in uw oorspronkelijke vraag - alleen met een veel eenvoudigere, zeer algemene controle. Zoals je kunt zien - ofwel de email is er of is het niet.



  1. Pymongo vindt waarde in subdocumenten

  2. Redis C# - Incr-waarde gebruiken in een transactie

  3. Aan de slag met databaseautomatisering

  4. sailsjs gebruikt nog steeds de standaarddatabase nadat deze is gewijzigd in mongodb