MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Намерете след попълване на мангуста

@Jason Cust вече го обясни доста добре - в тази ситуация често най-доброто решение е да промените схемата, за да предотвратите заявки Users по свойства на документи, съхранявани в отделна колекция.

Ето най-доброто решение, за което се сещам, което обаче няма да ви принуди да го направите (защото казахте в коментара, че не можете).

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

Това, което правим тук, е да попълваме само email s съответстваща допълнителна заявка (match опция в .populate() обаждане) - в противен случай email поле в Users документи ще бъдат зададени на null .

Всичко, което остава, е .filter на върнатите users масив, както в първоначалния ви въпрос - само с много по-проста, много обща проверка. Както можете да видите - или email има ли го или го няма.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Обединяване на връзки в Spring Boot и mongo db

  2. Как обяснявате отделна заявка в MongoDB?

  3. Как да се свържа с MongoDB 3.2 в Java с потребителско име и парола?

  4. Надграждането на mongodb няма ефект и все още показва старата версия

  5. Заявка за регулярни изрази на Node.js и Mongoose в множество полета