mongoose update : $inc is not working in upsert

倖福魔咒の 提交于 2020-01-03 09:07:08

问题


I am trying to update the document if exist or insert if not exist.I have one field with $inc,( want to increment previous value by one). My code is

var Appuser = new Appusers({
   imei: req.body.imei,
   $inc : {user_count:1},
   install_flag : 1
});
var upsertData = Appuser.toObject();

delete upsertData._id;

Appusers.update({imei: Appuser.imei}, upsertData, {upsert: true}, function(err, data){ 
   if(err) return console.log(err);
   res.send(data);
});

Only $inc is not working. In schema i have user_count : { type:Number, default:0}


回答1:


I'd like to suggest this:

Appusers.update({imei: Appuser.imei}, {$set: {imei: req.body.imei, install_flag : 1}, $inc : {user_count:1}}, {upsert: true}, function(err, data){ 
   if(err) return console.log(err);
   res.send(data);
});

Or If you want to use an object:

var upsertData = {
      $set: {imei: req.body.imei, install_flag : 1}, 
      $inc: {user_count: 1}
};

Appusers.update({imei: Appuser.imei}, upsertData, {upsert: true}, function(err, data){ 
   if(err) return console.log(err);
   res.send(data);
});



回答2:


You can not increase a value when it does not exists (yet). You can use $setOnInsert to set user_count to 1 when inserting the document. Here are the docs for $setOnInsert.

Your query will look like this:

var Appuser = new Appusers({
    imei: req.body.imei,
    install_flag : 1
});

Appusers
    .update({
        imei: Appuser.imei
    }, {
        $set: upsertData,
        $setOnInsert: {
            user_count: 1
        },
        $inc: {
            user_count:1
        }
    }, {
        upsert: true
    }, function(err, data) {
        if(err) return console.log(err);
        res.send(data);
    });


来源:https://stackoverflow.com/questions/32197885/mongoose-update-inc-is-not-working-in-upsert

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!