sql >> データベース >  >> NoSQL >> MongoDB

計算フィールドMongooseのパスで値NaN(型番号)の数値へのキャストに失敗しました

    評価とaverageRatingはどちらも仮想フィールドである必要があります。そうしないと、コレクションにproduct.ratings = 0のエントリがあると、/0除算によってスキーマがクラッシュします。 。したがって、最初に、仮想フィールドのゲッター関数によって評価を定義します。

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

    this.ratingsと仮定します この特定の製品のすべての評価が格納されている配列です。このようにして、product.numerRatingsにアクセスするたびに 、その配列内の更新されたエントリ数が表示されます。これを念頭に置いて、averageRatingに条件付きロジックを少し追加する必要があります:

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

    配列に評価がない限り、product.averageRating 問題のある除算を試みることなく、0を生成します。アレイに評価が含まれ始めた瞬間に、平均が計算されます。



    1. JavaMongoDBは一度に複数のドキュメントを保存します

    2. mongodbのログ分析データベースに最適なスキーマ設計

    3. MongoDBドキュメントサブドキュメント配列にサブドキュメントのIDを挿入して返します

    4. Mongodb node.js $ outは、toArray()を呼び出した場合にのみ集計が機能します