update with upsert: true is not updating in express,mongoose?
express, javascript, mongodb, node.js
Solution
var promiseArr = [];
for (var i = 0; i < summary.length; i++) {
promiseArr.push(saveOrUpdate(summary[i].mobilenumber, summary[i]));
}
function saveOrUpdate(phone, dataToUpdate) {
return new Promise((resolve, reject) => {
//Update document if found or insert otherwise
// upsert:true -> If set to true, creates a new document when no document matches the query criteria
Summary.findOne({
"mobilenumber": phone
}, function(err, data) {
var newSummary = dataToUpdate;
console.log(data);
console.log(newSummary);
if (data) {
newSummary.negativepoint += data.negativepoint;
newSummary.positivepoint += data.positivepoint;
newSummary.balancepoints += data.balancepoints;
}
Summary.update({
"mobilenumber": phone
},
dataToUpdate, {
upsert: true
},
function(err, raw) {
if (err) {
console.log(err);
} else {
console.log(raw);
}
});
});
});
}
Problem
``` var logs = [{ mobilenumber: '1', ref: 3, points: 1000, ctype: 'mycredit', entry: 'sdfsdf', entry: 0 }, { mobilenumber: '1', ref: 6, points: 2000, ctype: 'mycredit', entry: 'sdfsdf', entry: 0 }, { mobilenumber: '2', ref: 7, points: 2600, ctype: 'mycredit', entry: 'sdfsdf', entry: 0 }, { mobilenumber: '2', ref: 15, points: -1500, ctype: 'mycredit', entry: 'sdfsdf', entry: 0 }, { mobilenumber: '10', ref: 15, points: 800, ctype: 'mycredit', entry: 'sdfsdf', entry: 0 }, { mobilenumber: '11', ref: 15, points: 110, ctype: 'mycredit', entry: 'sdfsdf', entry: 0 }]; var summary = []; var positive = 0, negative = 0, total = 0, count = 0; for (var i = 0; i < logs.length; i++) { count = 0; positive = 0; negative = 0; total = 0; for (var j = i; j < logs.length; j++) { if (logs[i].mobilenumber === logs[j].mobilenumber) { if (logs[j].points < 0) { negative += logs[j].points; } else if (logs[j].points >= 0) { positive += logs[j].points; } total += logs[j].points; count++; } } i += count - 1; var obj = { mobilenumber: logs[i].mobilenumber, positivepoint: positive, negativepoint: negative, balancepoints: total } summary.push(obj); } ``` if you run above code you will get Summary objects in below code i am trying to insert/update code but insert is working but its not updating ``` var promiseArr = []; for(var i = 0; i<summary.length;i++) { promiseArr.push(saveOrUpdate(summary[i].mobilenumber, summary[i])); } function saveOrUpdate (phone, dataToUpdate) { return new Promise((resolve, reject) => { //Update document if found or insert otherwise // upsert:true -> If set to true, creates a new document when no document matches the query criteria Summary.update({"mobilenumber": phone}, dataToUpdate, {upsert: true}, function(err, raw){ if (err) { console.log(err); }else { console.log(raw); } }); }); } ``` Here i am trying to insert or update Summary object in Summary collection . i am searching mobilenumber in Summarycollection if mobilenumber already exsist i am updating that document otherwise ,i am creating new document for that mobilenumber insert is working but if mobilenumber already ther in summary collection its not updating help me out i m trying since three days i am using mongoose and database mlab version 3.2.11