javascript - How to prevent update function insert to the MongoDB from Meteor? -
i have meteor.method check existing document. when not found insert document, second time found update , insert. please check , fix following code:
'upload': function upload(data, name, eventid) { const wb = xlsx.read(data, {type:'binary'}); var checkupdate; xlsx.utils.sheet_to_json(wb.sheets[wb.sheetnames[0]]).foreach(r => { r.owner = this.userid, r.username = meteor.user().username, r.updatedat = new date(), r.amount = number(r.amount), r.eventid = eventid, r.firstname = r.firstname.trim(), r.lastname = r.lastname.trim(), registers.findone({ firstname: r.firstname, lastname: r.lastname, eventid: eventid }) ? registers.update({ firstname: r.firstname, lastname: r.lastname, eventid: eventid }, { $set: {updatedat: r.updatedat, amount: r.amount } }) : r.createdat = new date(), registers.insert(r) }) return wb; }, first time, if database empty, insert new document. second time, if found document update document, , insert new document update function not insert function.
meteor:primary> db.registers.find({ eventid: "azrumf45q8sbggry2" }) { "_id" : "mzqd73vsgyxrtyekj", "salution" : "mr.", "firstname" : "qwer", "lastname" : "asdf", "gender" : "male", "age" : "38", "province" : "chiangmai", "amount" : 1000, "owner" : "rbjwm4prthwao2vrs", "username" : "mai", "updatedat" : isodate("2017-09-11t12:28:36.966z"), "eventid" : "azrumf45q8sbggry2", "createdat" : isodate("2017-09-11t12:20:49.731z") } { "_id" : "suzphykvqqcyjzj5p", "salution" : "mr.", "firstname" : "abcd", "lastname" : "efgh", "gender" : "male", "age" : "30", "province" : "chiangmai", "amount" : 500, "owner" : "rbjwm4prthwao2vrs", "username" : "mai", "updatedat" : isodate("2017-09-11t12:28:37.017z"), "eventid" : "azrumf45q8sbggry2", "createdat" : isodate("2017-09-11t12:20:49.739z") } { "_id" : "qygf7alvbdwo5amua", "salution" : "mr.", "firstname" : "qwer", "lastname" : "asdf", "gender" : "male", "age" : "38", "province" : "chiangmai", "amount" : 1000, "owner" : "rbjwm4prthwao2vrs", "username" : "mai", "updatedat" : isodate("2017-09-11t12:28:36.966z"), "eventid" : "azrumf45q8sbggry2" } { "_id" : "xysbxgiz5t9qxad6r", "salution" : "mr.", "firstname" : "abcd", "lastname" : "efgh", "gender" : "male", "age" : "30", "province" : "chiangmai", "amount" : 500, "owner" : "rbjwm4prthwao2vrs", "username" : "mai", "updatedat" : isodate("2017-09-11t12:28:37.017z"), "eventid" : "azrumf45q8sbggry2" } from code, when add twice, second time, lose createdat field. don't know why.????
i have got !!!! thank comments
'upload': function upload(data, name, eventid) { const wb = xlsx.read(data, {type:'binary'}); var checkupdate; xlsx.utils.sheet_to_json(wb.sheets[wb.sheetnames[0]]).foreach(r => { if (!registers.findone({ firstname: r.firstname, lastname: r.lastname, eventid: eventid })) { r.owner = this.userid, r.username = meteor.user().username, r.updatedat = new date(), r.amount = number(r.amount), r.eventid = eventid, r.firstname = r.firstname.trim(), r.lastname = r.lastname.trim(), r.createdat = new date(), registers.insert(r) } else { r.owner = this.userid, r.username = meteor.user().username, r.updatedat = new date(), r.amount = number(r.amount), r.eventid = eventid, r.firstname = r.firstname.trim(), r.lastname = r.lastname.trim(), registers.update({ firstname: r.firstname, lastname: r.lastname, eventid: eventid }, { $set: {updatedat: r.updatedat, amount: r.amount } }) } }) return wb; },
i think looking collection.upsert method.
basically modifies 1 or more documents in collection, or insert 1 if no matching documents found. returns object keys numberaffected (the number of documents modified) , insertedid (the unique _id of document inserted, if any).
Comments
Post a Comment