sql >> Database teknologi >  >> NoSQL >> MongoDB

Forsøger kun at befolke i mongoose, hvis ref ikke er nul - virker ikke

du skal forstå rækkefølgen for udførelse af din kode:

  1. mongoose henter alle bøger fra databasen, hvor {_creator:{$ne:null}} . Mongo ser kun på referencen i bogsamlingen for at afgøre, hvilke dokumenter der skal returneres. Din bog har stadig en reference til en forfatter, og mongo vil ikke bemærke, at der ikke er nogen matchende forfatter i forfattersamlingen, så din bog er indlæst.

  2. mongoose udfylder alle returnerede resultater:så den indlæser forfatterne fra forfattersamlingen og erstatter referencerne med de rigtige objekter. For din bog finder den ikke en matchende forfatter, så den sætter null der.

Det er derfor, du ender med din resultatliste.

Mongo understøtter ikke joins - derfor kan du ikke lave en forespørgsel, der indeholder data fra mere end én samling. Populate er blot en måde at erstatte referencer i din resultatliste med rigtige data, du kan aldrig bruge udfyldte data som en del af dine where-klausuler.

For at løse dit problem kan du enten:

  • filtrer din endelige resultatliste i JS-kode, f.eks. med _.filter for lodash-biblioteket.
  • opdater alle dine bøger og fjern referencen, hver gang du sletter en forfatter. Du kan bruge kroge på forfatterskemaet til at gøre dette.

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




  1. Sådan gør du:Aktiver brugergodkendelse og -autorisation i Apache HBase

  2. Numerisk samlingsnavn Fjern

  3. Gør en sum med mongo db aggregeringsramme

  4. MongoDB v2.4.9 sorteres efter boolesk felt