aggiornamento mangusta: $ inc non funziona in upsert

Sto cercando di aggiornare il documento, se esiste o se non esiste, ho un campo con $ inc, (voglio incrementare il valore precedente di uno). Il mio codice è

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

Solo $ inc non funziona. Nello schema ho user_count : { type:Number, default:0}

Vorrei suggerire questo:

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

O se vuoi usare un 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); }); 

Non è ansible aumentare un valore quando non esiste (ancora). È ansible utilizzare $setOnInsert per impostare user_count su 1 quando si inserisce il documento. Ecco i documenti per $ setOnInsert .

La tua query sarà simile a questa:

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