MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Znajdź po obsadzeniu mangusty

@Jason Cust wyjaśniłem to już całkiem dobrze - w takiej sytuacji często najlepszym rozwiązaniem jest zmiana schematu, aby zapobiec zapytaniom Users według właściwości dokumentów przechowywanych w oddzielnej kolekcji.

Oto najlepsze rozwiązanie, jakie przychodzi mi do głowy, które jednak nie zmusi Cię do tego (ponieważ powiedziałeś w komentarzu, że nie możesz).

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

To, co tutaj robimy, to wypełnianie tylko email s pasujące do dodatkowego zapytania (match opcja w .populate() zadzwoń) - w przeciwnym razie email pole w Users dokumenty zostaną ustawione na null .

Pozostało tylko .filter na zwróconych users tablica, jak w pierwotnym pytaniu - tylko ze znacznie prostszym, bardzo ogólnym sprawdzeniem. Jak widać - albo email jest lub nie ma.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Usuwanie dokumentów z kolekcji mongodb z node.js

  2. Przegląd indeksowania bazy danych dla MongoDB

  3. Pymongo / MongoDB:utworzyć indeks czy zapewnić indeks?

  4. Wizualne zarządzanie dokumentami i kolekcjami MongoDB

  5. Jak utworzyć nową bazę danych w MongoDB za pomocą sterownika c#?