Javascript 如何防止Meteor向MongoDB插入更新函数?

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

我使用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;
},

我想你在寻找方法


基本上,它修改集合中的一个或多个文档,或者在没有找到匹配文档时插入一个文档。返回一个对象,其键为numberraffected(修改的文档数)和insertedId(插入的文档的唯一id,如果有)。

您的问题是什么?这个代码是否有效?“阻止更新”-基于哪个前提?大家好,我更新了这个问题*冥河,它不工作*Jankapunkt,我不知道你的意思。无论如何,感谢所有回复。*Jankapunkt,我刚刚了解到,我正在尝试只更新更新的日期和金额,但它会插入新文档。*Ankur,谢谢你的帮助,但我想先更新,但如果不匹配,只需插入createdAt字段。如果有,请发布你的SimpleSchema。嗨,Ankur,非常感谢你的帮助。我正在尝试使用许多解决方案,我已经找到了。但我认为这不是一个好的编码。我不使用模式,我使用纯mongodb。你能分享一下解决方案吗?请参阅我的编辑中的更新解决方案。您所使用的是非常典型的,不推荐用于将来的代码维护。尝试使用SimpleSchema,您会发现它非常容易实现。