我在Mongoose模型上有2个字段:totalAttempts和totalRight。我打算根据它们计算准确度。
totalAttempts: {
type: Number,
default: 1
},
totalRight: {
type: Number,
default: 1
}
这就是我所做的[它不起作用]
accuracy:{
type:Number,
required:function() {return (this.totalRight/this.totalAttempts*100).toFixed(2)}
}
另外,如果我没有在Accuracy上设置默认值,我会收到错误:
ERROR; While creating new question ..ValidationError: Path `accuracy` is require d.
events.js:163
实现这一目标的正确方法是什么?每次用户请求Model时,我都有一个工作解决方案来获取totalAttempts和totalRight。但我想在我的数据库中保存该计算和存储信息。
答案 0 :(得分:4)
预先保存是正确的方法。将其添加到您的架构中。
ModelSchema
.pre('save', function(next){
this.accuracy = this.totalRight/this.totalAttempts*100).toFixed(2)
next();
});
将accuracy
定义更改为:
accuracy: {
type: Number
}
答案 1 :(得分:1)
在保存文档之前,您不需要计算它。 您只需要添加一个虚拟字段,即可在需要时获取准确性的值
yourSchema.virtual("accuracy").get(function () {
return this.totalRight/this.totalAttempts*100).toFixed(2)
});
现在,当您查询该文档时,您将获得准确性,但不要忘记在文档查询中使用.toJSON({ virtuals: true })
有关猫鼬虚拟物品的更多信息,请检查mongoose virtuals。 使用精益时,请使用此插件mongoose-lean-virtuals。