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

Cast to Number mislykkedes for værdien NaN (typenummer) ved sti på et beregnet felt Mongoose

Både vurderinger og gennemsnitsbedømmelse skal være virtuelle felter:ellers vil /0-divisionen ødelægge dit skema i det øjeblik, du har en post i din samling med product.ratings = 0 . Så hvad jeg ville gøre er for det første at definere vurderinger ved hjælp af en getter-funktion for et virtuelt felt:

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

Forudsat at this.ratings er et array, hvor alle vurderinger for dette specifikke produkt er gemt. På denne måde, hver gang du får adgang til product.numerRatings , vil den opdaterede mængde af poster i det array blive vist. Med dette i tankerne skal du blot tilføje en lille smule betinget logik til din gennemsnitsvurdering:

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

Så længe der ikke er nogen vurderinger i arrayet, product.averageRating vil producere en 0, uden at forsøge nogen problematisk division. I det øjeblik det array begynder at indeholde vurderinger, vil et gennemsnit blive beregnet.



  1. Mongodb Atlas:ikke autoriseret på admin til at udføre kommando

  2. Enkel forbindelse til mongodb i react app

  3. Indsæt stor plade i mongodb ved hjælp af mongo-skal

  4. MongoDB:påvirker dokumentstørrelsen forespørgselsydeevne?