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

Échec de la conversion en nombre pour la valeur NaN (numéro de type) au niveau du chemin sur un champ calculé Mongoose

Ratings et averageRating doivent être des champs virtuels :sinon, la division /0 va planter votre schéma au moment où vous avez une entrée dans votre collection avec product.ratings = 0 . Donc, ce que je ferais, c'est d'abord définir les notes par une fonction getter pour un champ virtuel :

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

En supposant que this.ratings est un tableau dans lequel toutes les évaluations de ce produit particulier sont stockées. De cette façon, chaque fois que vous accédez à product.numerRatings , le nombre mis à jour d'entrées dans ce tableau sera affiché. Dans cet esprit, il vous suffit d'ajouter un peu de logique conditionnelle à votre note moyenne :

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

Tant qu'il n'y a pas d'évaluations dans le tableau, product.averageRating produira un 0, sans tenter de division problématique. Au moment où le tableau commence à contenir des notes, une moyenne sera calculée.