sql >> Databáze >  >> NoSQL >> MongoDB

Přetypování na číslo selhalo pro hodnotu NaN (číslo typu) na cestě ve vypočítaném poli Mongoose

Hodnocení i průměrné hodnocení by měly být virtuální pole:jinak divize /0 zhroutí vaše schéma v okamžiku, kdy budete mít ve sbírce položku s product.ratings = 0 . Takže to, co bych udělal, je zaprvé definovat hodnocení pomocí funkce getter pro virtuální pole:

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

Za předpokladu, že this.ratings je pole, kde jsou uložena všechna hodnocení pro tento konkrétní produkt. Tímto způsobem při každém přístupu k product.numerRatings , zobrazí se aktualizovaný počet záznamů v tomto poli. S ohledem na to stačí ke svému průměrnému hodnocení přidat trochu podmíněné logiky:

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

Pokud pole neobsahuje žádná hodnocení, product.averageRating vytvoří 0, aniž by se pokusil o jakékoli problematické dělení. V okamžiku, kdy pole začne obsahovat hodnocení, bude vypočítán průměr.



  1. Memcache vs Java Memory

  2. Textové vyhledávání MongoDB A více vyhledávacích slov

  3. Mohu i nadále přistupovat ke kontaktnímu aspektu sitecore, jakmile je relace vyprázdněna?

  4. Nelze vytvořit instanci mongoose schématu:Objekt není funkce