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

Опит за попълване в mongoose само ако ref не е null - не работи

трябва да разберете реда на изпълнение на вашия код:

  1. mongoose получава всички книги от базата данни, където {_creator:{$ne:null}} . Монго преглежда само справката в колекцията от книги, за да определи кои документи да върне. Книгата ви все още има препратка към автор и mongo няма да забележи, че няма съвпадащ автор в колекцията автори, така че книгата ви е заредена.

  2. mongoose попълва всички върнати резултати:така че зарежда авторите от колекцията Authors и замества препратките с реалните обекти. За вашата книга не намира съответстващ автор, така че поставя null там.

Ето защо завършвате с вашия списък с резултати.

Mongo не поддържа обединения - следователно не можете да направите заявка, която включва данни от повече от една колекция. Попълването е просто начин да замените препратките във вашия списък с резултати с реални данни, никога не можете да използвате попълнени данни като част от вашите клаузи where.

За да разрешите проблема си, можете:

  • филтрирайте окончателния си списък с резултати в JS код, напр. с _.filter на библиотеката lodash.
  • актуализирайте всичките си книги и премахвайте препратката всеки път, когато изтриете автор. Можете да използвате кукички в схемата на автора, за да направите това.

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




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo сортиране по динамично поле

  2. Върнете само съвпадащи елементи на поддокумент в рамките на вложен масив

  3. MongoDb масив от заявки с нулеви стойности

  4. Актуализиране на голям брой записи в колекция

  5. Mongo, намерете чрез списък с идентификатори