Javascript 如何防止Meteor向MongoDB插入更新函数?
我使用Meteor.method检查现有文档。 如果找不到,请插入文档, 这是它第二次发现它更新并插入。 请帮助检查并修复我的以下代码:Javascript 如何防止Meteor向MongoDB插入更新函数?,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我使用Meteor.method检查现有文档。 如果找不到,请插入文档, 这是它第二次发现它更新并插入。 请帮助检查并修复我的以下代码: '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]]).forE
'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;
},
第一次,如果数据库为空,它将插入新文档。
第二次,如果找到文档,则更新文档,
并使用更新功能而不是插入功能插入新文档
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" }
从代码中,当我添加两次时,第二次,我丢失了createdAt字段。
我不知道为什么
我明白了!!!!非常感谢您的评论
'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;
},
我想你在寻找方法
基本上,它修改集合中的一个或多个文档,或者在没有找到匹配文档时插入一个文档。返回一个对象,其键为numberraffected(修改的文档数)和insertedId(插入的文档的唯一id,如果有)。您的问题是什么?这个代码是否有效?“阻止更新”-基于哪个前提?大家好,我更新了这个问题*冥河,它不工作*Jankapunkt,我不知道你的意思。无论如何,感谢所有回复。*Jankapunkt,我刚刚了解到,我正在尝试只更新更新的日期和金额,但它会插入新文档。*Ankur,谢谢你的帮助,但我想先更新,但如果不匹配,只需插入createdAt字段。如果有,请发布你的SimpleSchema。嗨,Ankur,非常感谢你的帮助。我正在尝试使用许多解决方案,我已经找到了。但我认为这不是一个好的编码。我不使用模式,我使用纯mongodb。你能分享一下解决方案吗?请参阅我的编辑中的更新解决方案。您所使用的是非常典型的,不推荐用于将来的代码维护。尝试使用SimpleSchema,您会发现它非常容易实现。