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

Cast to Number non riuscito per il valore NaN (tipo numero) nel percorso su un campo calcolato Mongoose

Sia ratings che averageRating dovrebbero essere campi virtuali:altrimenti, la divisione /0 andrà in crash il tuo schema nel momento in cui avrai una voce nella tua collezione con product.ratings = 0 . Quindi quello che farei è, in primo luogo, definire le valutazioni tramite una funzione getter per un campo virtuale:

productSchema.virtual("numberRatings").get(function() {
    return this.ratings.length;
});

Supponendo che this.ratings è un array in cui sono archiviate tutte le valutazioni per questo particolare prodotto. In questo modo, ogni volta che accedi a product.numerRatings , verrà visualizzata la quantità aggiornata di voci in quell'array. Tenendo presente questo, devi solo aggiungere un po' di logica condizionale alla tua valutazione media:

productSchema.virtual("averageRating").get(function() {
    return this.ratings.length > 0 ? this.totalRating / this.ratings.length : 0;
});

Finché non ci sono valutazioni nell'array, product.averageRating produrrà uno 0, senza tentare alcuna divisione problematica. Nel momento in cui l'array inizia a contenere valutazioni, verrà calcolata una media.