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

Mongodb 使用Mongoose计算数学值的最佳方法,mongodb,mongoose,Mongodb,Mongoose,所有用户分数都存储在以下集合中: var scoreSchema = new Schema({ userId: String, totalPredictions: Number, wins: Number, pending: Number, accuracy: Number }); 这里的准确度定义为 accuracy = wins * 100 / (totalPredictions - pending) 我想做的是在每次对文档进行更新时更新准确性字段 根据mongoo

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

var scoreSchema = new Schema({
  userId: String,
  totalPredictions: Number, 
  wins: Number,
  pending: Number,
  accuracy: Number
});
这里的准确度定义为

accuracy = wins * 100 / (totalPredictions - pending)
我想做的是在每次对文档进行更新时更新准确性字段

根据mongoose,我们可以使用schema.pre('save')…方法

但是,findOneAndUpdate上没有调用该函数,这是一个值得关注的问题

我还可以如何保持此字段的有效性?

您可以使用

比如说,

scoreSchema.virtual("accuracy").get(function(){
    return this.wins * 100 / (this.totalPredictions - pending);
});
在执行此操作之前,您可能需要启用virtuals:

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

默认情况下,当我执行Model.find..时,不会返回虚拟属性..因此不会返回help@SMV编辑,试试这个。