2017-05-13 15 views
2

モンゴースモデルにはtotalAttemptsとtotalRightという2つのフィールドがあります。私はそれらに基づいて精度を計算するつもりです。またモンゴースの他の2つのフィールドに基づく第3フィールドの計算

totalAttempts: { 
    type: Number, 
    default: 1 
}, 
totalRight: { 
    type: Number, 
    default: 1 
} 

これは私がやっていることである[それは動作しません]

accuracy:{ 
    type:Number, 
    required:function() {return (this.totalRight/this.totalAttempts*100).toFixed(2)} 
} 

、私は正確にデフォルト値を入れていない場合、私はエラーを取得する:

ERROR; While creating new question ..ValidationError: Path `accuracy` is require      d. 

events.js:163 

これを達成する正しい方法は何でしょうか?ユーザーがそのモデルをリクエストするたびにtotalAttemptsとtotalRightを取得するためのソリューションが既に用意されています。しかし、その計算とストア情報をデータベースに保存したいと思います。

答えて

4

事前保存は正しい方法です。スキーマに追加します。

ModelSchema 
.pre('save', function(next){ 
    this.accuracy = this.totalRight/this.totalAttempts*100).toFixed(2) 
    next(); 
}); 

変更accuracy定義に:

accuracy: { 
    type: Number 
} 
+0

私はまだエラーを取得しています。新しい質問を作成中..ValidationError:パス '精度'が必要です。 events.js:163 throw er; //処理されていない 'error'イベント ^ MongooseError:質問の検証に失敗しました –

+1

あなたの質問に 'required'が' default'を意味すると思います。したがって、必要な精度を取り除くと、それが機能するはずです。 'pre save'はバリデーションが実行された後に呼び出されます。そのため、あなたのケースでは 'required'検証が失敗しています。 –

+0

驚くばかり!ありがとうございました 。それは今働く –

関連する問題