findOneAndUpdate增量而不是mongoose中的更新

时间:2016-10-09 17:28:08

标签: node.js mongodb mongoose

我有一个功能,假设加起来或减少信用。但我的下面的代码只是取代了信用值。我可以做增量或减量的猫鼬有什么捷径吗?否则我将得到该值然后将其插回,我认为不是这样做的。

function update_total_credit(total_amount, topup_value){
            User.findOneAndUpdate(
                {email: user_email}, 
                {$set:{credit:total_amount}}, 
                {new: true}, 
                function(err, response){
                if(err){
                    res.json(0);
                }else{
                    res.json(response.credit);
                }
            });

        }

2 个答案:

答案 0 :(得分:3)

您可以将值设置为动态并将其传递给查询

function update_total_credit(total_amount, topup_value) {
//The flag value means your breakpoint where you decide which value should go in query, you can change on your requirement basis
  var flag = 1;//increament by 1 every time
  if (!flag)
    flag = -1;//decreament by 1 every time
  User.findOneAndUpdate({
      email: user_email
    }, {
      $inc: {
        credit: flag
      }
    },
    function(err, response) {
      if (err) {
        res.json(0);
      } else {
        res.json(response.credit);
      }
    });
}

请参阅此处有关$inc

的参考资料

答案 1 :(得分:0)

使用$inc按照以下方式增加特定字段

更新:

db.getCollection('noti').findOneAndUpdate(
   { _id: ObjectId("5bc061f05a4c0511a9252e88") }, 
   { 
      $inc: { count: 1 } 
   }, {new: true })

结果:

{
    "_id" : ObjectId("5bc061f05a4c0511a9252e88"),
    "count" : 8.0,
    "color" : "green",
    "icon" : "circle",
    "name" : "online visitor",
    "read" : false,
    "date" : ISODate("2018-10-12T08:57:20.853Z"),
    "__v" : 0.0,
    "views" : 1.0
}

这里的计数增加1,然后增加7。