трябва да разберете реда на изпълнение на вашия код:
-
mongoose получава всички книги от базата данни, където
{_creator:{$ne:null}}
. Монго преглежда само справката в колекцията от книги, за да определи кои документи да върне. Книгата ви все още има препратка към автор и mongo няма да забележи, че няма съвпадащ автор в колекцията автори, така че книгата ви е заредена. -
mongoose попълва всички върнати резултати:така че зарежда авторите от колекцията Authors и замества препратките с реалните обекти. За вашата книга не намира съответстващ автор, така че поставя
null
там.
Ето защо завършвате с вашия списък с резултати.
Mongo не поддържа обединения - следователно не можете да направите заявка, която включва данни от повече от една колекция. Попълването е просто начин да замените препратките във вашия списък с резултати с реални данни, никога не можете да използвате попълнени данни като част от вашите клаузи where.
За да разрешите проблема си, можете:
- филтрирайте окончателния си списък с резултати в JS код, напр. с _.filter на библиотеката lodash.
- актуализирайте всичките си книги и премахвайте препратката всеки път, когато изтриете автор. Можете да използвате кукички в схемата на автора, за да направите това.
AuthorSchema.post('remove', function(doc) {// update your books here});