sql >> Databasteknik >  >> NoSQL >> MongoDB

Försöker befolka i mongoose endast om ref inte är null - fungerar inte

du måste förstå ordningen för exekvering av din kod:

  1. mongoose hämtar alla böcker från databasen där {_creator:{$ne:null}} . Mongo tittar bara på referensen i boksamlingen för att avgöra vilka dokument som ska returneras. Din bok har fortfarande en referens till en författare, och mongo kommer inte att märka att det inte finns någon matchande författare i författarens samling, så din bok är laddad.

  2. mongoose fyller på alla returnerade resultat:så den laddar författarna från författarens samling och ersätter referenserna med de riktiga objekten. För din bok hittar den inte en matchande författare, så den sätter null där.

Det är därför du slutar med din resultatlista.

Mongo stöder inte joins - därför kan du inte göra en fråga som innehåller data från mer än en samling. Fylla är bara ett sätt att ersätta referenser i din resultatlista med riktiga data, du kan aldrig använda ifylld data som en del av dina where-klausuler.

För att lösa ditt problem kan du antingen:

  • filtrera din slutliga resultatlista i JS-kod, t.ex. med _.filter för lodash-biblioteket.
  • uppdatera alla dina böcker och ta bort referensen när du tar bort en författare. Du kan använda krokar på Author-Schema för att göra detta.

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




  1. kryptiskt mongodb-fel LEFT_SUBFIELD stöder endast Objekt:statistik inte:6

  2. Hur skalar man MongoDB?

  3. MapReduce aggregering baserat på attribut som finns utanför dokumentet

  4. Hur initierar man mongodb-replikeringsuppsättningen utan att anropa rs.initiate()?