MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Falha na conversão para número para o valor NaN (número do tipo) no caminho em um campo calculado Mongoose


Ambos ratings e averageRating devem ser campos virtuais:caso contrário, a divisão /0 irá travar seu esquema no momento em que você tiver uma entrada em sua coleção com product.ratings = 0 . Então, o que eu faria é, em primeiro lugar, definir classificações por uma função getter para um campo virtual:
productSchema.virtual("numberRatings").get(function() {
    return this.ratings.length;
});

Supondo que this.ratings é uma matriz onde todas as classificações para este produto específico são armazenadas. Dessa forma, cada vez que você acessar product.numerRatings , a quantidade atualizada de entradas nesse array será exibida. Com isso em mente, você só precisa adicionar um pouco de lógica condicional ao seu averageRating:
productSchema.virtual("averageRating").get(function() {
    return this.ratings.length > 0 ? this.totalRating / this.ratings.length : 0;
});

Desde que não haja classificações na matriz, product.averageRating produzirá um 0, sem tentar qualquer divisão problemática. No momento em que a matriz começar a conter classificações, uma média será calculada.