MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Essayer de remplir la mangouste uniquement si ref n'est pas nul - ne fonctionne pas

vous devez comprendre l'ordre d'exécution de votre code :

  1. mongoose récupère tous les livres de la base de données où {_creator:{$ne:null}} . Mongo ne regarde que la référence à l'intérieur de la collection de livres pour déterminer quels documents retourner. Votre livre a toujours une référence à un auteur, et mongo ne remarquera pas qu'il n'y a pas d'auteur correspondant dans la collection Auteurs, donc votre livre est chargé.

  2. mongoose remplit tous les résultats renvoyés :il charge donc les auteurs de la collection Authors et remplace les références par les objets réels. Pour votre livre, il ne trouve pas d'auteur correspondant, il met donc le null là.

C'est pourquoi vous vous retrouvez avec votre liste de résultats.

Mongo ne prend pas en charge les jointures - vous ne pouvez donc pas effectuer une requête qui inclut des données provenant de plusieurs collections. Remplir n'est qu'un moyen de remplacer les références de votre liste de résultats par des données réelles, vous ne pouvez jamais utiliser de données peuplées dans le cadre de vos clauses where.

Pour résoudre votre problème, vous pouvez soit :

  • filtrer votre liste de résultats finale en code JS, par ex. avec _.filter de la librairie lodash.
  • mettez à jour tous vos livres et supprimez la référence chaque fois que vous supprimez un auteur. Vous pouvez utiliser des hooks sur Author-Schema pour ce faire.

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