这是我的架构,
var ProductSchema = new Schema({
_id: {
type: Schema.Types.ObjectId,
ref: "User"
},
overall_rating: {
average: {
type: Number,
default: null
},
rate_count:{
type: Number,
default: 0
}
}
});
我需要做的是仅使用一个mongoose查询来更新“overall_rating.average”。 (由于并发问题,不能使用两个查询。)
如果考虑以下条款
current_avg => current value in "overall_rating.average"
current_rate_count=> current value in "overall_rating.rate_count"
new_rating => new rating value
查询应该是这样的
Product.findOneAndUpdate({ '_id': req.body.product_id }, { $set: { 'overall_rating.average': (current_avg*current_rate_count + new_rating)/(rate_count+1) }, {$inc: { overall_rating.rate_count: 1 }} }, { new: true }).exec(function(err, product) {
if (err) {
console.log(err);
return res.json({ success: false, msg: err });
} else {
return res.json({ success: true, obj: product});
}
});
必须将此作为一个原子查询执行。所以不能用两步(两个查询)
有人可以帮我吗?