sql >> Databáze >  >> NoSQL >> MongoDB

Pokus o naplnění mongoose pouze v případě, že ref není null - nefunguje

musíte pochopit pořadí provádění vašeho kódu:

  1. mongoose získá všechny knihy z databáze, kde {_creator:{$ne:null}} . Mongo se pouze dívá na odkaz uvnitř sbírky knih, aby určil, které dokumenty vrátit. Vaše kniha stále obsahuje odkaz na autora a mongo si nevšimne, že ve sbírce Autoři není žádný odpovídající autor, takže se vaše kniha načte.

  2. mongoose zaplňuje všechny vrácené výsledky:načítá tedy autory z kolekce Autoři a nahrazuje odkazy skutečnými objekty. Pro vaši knihu nenajde odpovídajícího autora, takže vloží null tam.

To je důvod, proč skončíte se svou výsledkovou listinou.

Mongo nepodporuje spojení – proto nemůžete provést dotaz, který obsahuje data z více než jedné kolekce. Vyplnění je jen způsob, jak nahradit odkazy ve výsledkovém seznamu skutečnými daty, nikdy nemůžete použít naplněná data jako součást klauzulí where.

Chcete-li problém vyřešit, můžete:

  • filtrujte svůj konečný seznam výsledků v kódu JS, např. s _.filtrem knihovny lodash.
  • aktualizujte všechny své knihy a odeberte odkaz, kdykoli smažete autora. K tomu můžete použít háčky na schématu Author-Schema.

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




  1. Skupina MongoDB pomocí ovladače Ruby

  2. MongoDB find()

  3. Analyzátor BASH BSON

  4. Model Mongoose TypeError:Schéma není konstruktor