Reputation: 1335
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}
Upvotes: 7
Views: 8554
Reputation: 5354
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);
});
Upvotes: 9
Reputation: 14590
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);
});
Upvotes: 8