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

Cercando di popolare in mangusta solo se ref non è nullo - non funziona

devi capire l'ordine di esecuzione del tuo codice:

  1. mongoose ottiene tutti i libri dal database in cui {_creator:{$ne:null}} . Mongo sta solo guardando il riferimento all'interno della collezione di libri per determinare quali documenti restituire. Il tuo libro ha ancora un riferimento a un autore e mongo non noterà che non c'è nessun autore corrispondente nella raccolta Autori, quindi il tuo libro è caricato.

  2. mongoose sta popolando tutti i risultati restituiti:quindi carica gli autori dalla raccolta Autori e sostituisce i riferimenti con gli oggetti reali. Per il tuo libro non trova un autore corrispondente, quindi inserisce null là.

Ecco perché finisci con la tua lista dei risultati.

Mongo non supporta i join, quindi non puoi eseguire una query che includa dati da più di una raccolta. Popola è solo un modo per sostituire i riferimenti nell'elenco dei risultati con dati reali, non puoi mai utilizzare i dati popolati come parte delle clausole where.

Per risolvere il tuo problema puoi:

  • filtra l'elenco dei risultati finali nel codice JS, ad es. con _.filtro della libreria lodash.
  • aggiorna tutti i tuoi libri e rimuovi il riferimento ogni volta che elimini un autore. Puoi usare gli hook sullo schema dell'autore per farlo.

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