sql >> Base de Datos >  >> NoSQL >> MongoDB

La conversión a número falló por el valor NaN (número de tipo) en la ruta en un campo calculado Mongoose

Tanto las calificaciones como la calificación promedio deben ser campos virtuales:de lo contrario, la división /0 colapsará su esquema en el momento en que tenga una entrada en su colección con product.ratings = 0 . Entonces, lo que haría sería, en primer lugar, definir las calificaciones mediante una función captadora para un campo virtual:

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

Asumiendo que this.ratings es una matriz donde se almacenan todas las calificaciones de este producto en particular. De esta forma, cada vez que acceda a product.numerRatings , se mostrará la cantidad actualizada de entradas en esa matriz. Con esto en mente, solo necesita agregar un poco de lógica condicional a su calificación promedio:

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

Siempre que no haya calificaciones en la matriz, product.averageRating producirá un 0, sin intentar ninguna división problemática. En el momento en que la matriz comience a contener calificaciones, se calculará un promedio.