MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Rzutowanie na numer nie powiodło się dla wartości NaN (numer typu) na ścieżce w polu wyliczanym Mongoose

Zarówno ratings, jak i średniaRating powinny być polami wirtualnymi:w przeciwnym razie podział /0 spowoduje awarię schematu w momencie, gdy w kolekcji pojawi się wpis z product.ratings = 0 . Po pierwsze, chciałbym zdefiniować oceny za pomocą funkcji pobierającej dla wirtualnego pola:

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

Zakładając, że this.ratings to tablica, w której przechowywane są wszystkie oceny dla tego konkretnego produktu. W ten sposób za każdym razem, gdy uzyskujesz dostęp do product.numerRatings , zostanie wyświetlona zaktualizowana liczba wpisów w tej tablicy. Mając to na uwadze, wystarczy dodać trochę logiki warunkowej do swojej średniej oceny:

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

Dopóki w tablicy nie ma ocen, product.averageRating da 0, bez próby dzielenia. W momencie, gdy tablica zacznie zawierać oceny, zostanie obliczona średnia.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose znajdź jeden i przejdź do szeregu dokumentów

  2. Jak uzyskać status slave mongodb za pomocą nodejs?

  3. Dlaczego gridfs get nie działa na identyfikatorze pliku (ObjectId) tylko według nazwy pliku

  4. Jak przekonwertować BigDecimal na Double w frameworku spring-data-mongodb

  5. Spłaszczanie schematu mongoDB