使用Mongoose计算数学值的最佳方法

时间:2015-09-12 11:26:23

标签: mongodb mongoose

所有用户分数都存储在以下集合中:

var scoreSchema = new Schema({
  userId: String,
  totalPredictions: Number, 
  wins: Number,
  pending: Number,
  accuracy: Number
});

此处准确度定义为

accuracy = wins * 100 / (totalPredictions - pending)

我想做的是每次更新文档时更新准确性字段

根据mongoose,我们可以使用schema.pre('save'.. method。

然而,这不会在findOneAndUpdate上调用,这是一个问题。

我还能如何保持这个领域的有效性?

1 个答案:

答案 0 :(得分:1)

您可以使用virtuals

例如,

scoreSchema.virtual("accuracy").get(function(){
    return this.wins * 100 / (this.totalPredictions - pending);
});

在此之前,您可能需要启用虚拟:

var scoreSchema = new Schema({
  userId: String,
  totalPredictions: Number, 
  wins: Number,
  pending: Number,
  accuracy: Number
},{
    toObject: { virtuals: true },
    toJSON: { virtuals: true }
});