仅使用一个查询的Mongoose更新平均字段

时间:2018-05-28 07:22:30

标签: node.js mongodb mongoose average mongoose-schema

这是我的架构,

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});
   }
});

必须将此作为一个原子查询执行。所以不能用两步(两个查询)

有人可以帮我吗?

0 个答案:

没有答案