我有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]]).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;
},
答案 0 :(得分:1)
我认为您正在寻找Collection.upsert方法。
基本上它会修改集合中的一个或多个文档,或者如果找不到匹配的文档则插入一个文档。返回一个对象,其中numberAffected键(已修改的文档数)和insertedId(已插入文档的唯一_id,如果有)。