musisz zrozumieć kolejność wykonywania kodu:
-
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. -
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});