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

Próba wypełnienia w manguście tylko wtedy, gdy ref nie jest null - nie działa

musisz zrozumieć kolejność wykonywania kodu:

  1. mangusta pobiera wszystkie książki z bazy danych, w której {_creator:{$ne:null}} . Mongo patrzy tylko na odniesienie w kolekcji książek, aby określić, które dokumenty zwrócić. Twoja książka nadal zawiera odniesienie do autora, a mongo nie zauważy, że w kolekcji autorów nie ma pasującego autora, więc twoja książka jest załadowana.

  2. mangusta wypełnia wszystkie zwrócone wyniki:ładuje więc autorów z kolekcji Authors i zastępuje referencje rzeczywistymi obiektami. W przypadku Twojej książki nie znajduje pasującego autora, więc umieszcza null tam.

Dlatego kończysz z listą wyników.

Mongo nie obsługuje złączeń — dlatego nie można wykonać zapytania zawierającego dane z więcej niż jednej kolekcji. Wypełnij to tylko sposób na zastąpienie odwołań na liście wyników rzeczywistymi danymi, nigdy nie możesz użyć wypełnionych danych jako części klauzul where.

Aby rozwiązać swój problem, możesz:

  • przefiltruj końcową listę wyników w kodzie JS, np. z _.filtrem biblioteki lodash.
  • zaktualizuj wszystkie swoje książki i usuń odniesienie za każdym razem, gdy usuniesz autora. Aby to zrobić, możesz użyć haków na schemacie autora.

AuthorSchema.post('remove', function(doc) {// update your books here});




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Wstawianie obiektu momentjs do kolekcji Meteor

  2. MongoDB:jaka jest różnica między $elemMatch a $i znajdowaniem obiektów wewnątrz tablicy?

  3. Mongodb wyszukaj zapytanie z $blisko i współrzędnymi nie działa

  4. Jak FILTROWAĆ dane zwrócone między dwiema datami z mongodb za pomocą agregacji:dopasowania, wyszukiwania i projektu?

  5. Skutecznie określaj właściciela rekordu w hierarchii za pomocą MongoDB