sql >> Databasteknik >  >> NoSQL >> MongoDB

Cast to Number misslyckades för värdet NaN (typnummer) vid sökväg på ett beräknat fält Mongoose

Både betyg och genomsnittsbetyg bör vara virtuella fält:annars kommer /0-divisionen att krascha ditt schema när du har en post i din samling med product.ratings = 0 . Så vad jag skulle göra är för det första att definiera betyg med en getter-funktion för ett virtuellt fält:

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

Förutsatt att this.ratings är en array där alla betyg för just denna produkt lagras. På detta sätt, varje gång du kommer åt product.numerRatings , kommer den uppdaterade mängden poster i den arrayen att visas. Med detta i åtanke behöver du bara lägga till lite villkorlig logik till din genomsnittliga betyg:

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

Så länge det inte finns några betyg i arrayen, product.averageRating kommer att producera en 0, utan att göra någon problematisk division. I samma ögonblick som arrayen börjar innehålla betyg kommer ett genomsnitt att beräknas.



  1. hur man sammanfogar olika mongoose-resultat till en JSON-array för att visa på DataTable?

  2. Hur begränsar man en mongoanvändare från att tappa en samling?

  3. MongoError:filterparameter måste vara ett objekt

  4. Node.js mongoose prestanda