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