【发布时间】:2019-06-13 10:38:59
【问题描述】:
我有一个(几千个)数据对象数组,我需要根据条件插入或更新。在我的模型类中实现了一个简单的upsert() 方法。
实施
csv.upsert = async function (values, condition) {
let obj = await csv.findOne({ where: condition });
if (obj) {
// update
console.log("existing record updated")
return await obj.update(values);
} else {
// insert
console.log("new record inserted")
return await csv.create(values);
}
}
然后使用这个 upsert 方法,我循环遍历对象数组以在 db 中插入或更新它们。
用法
try {
await models.sequelize.authenticate();
await models.sequelize.sync();
let dataToBeInserted = getArrayOfDatatoInsert();
dataToBeInserted.map(async function (data) {
let condition = {
'categorygroup': data.categorygroup,
'category': data.category,
'country': data.country,
'city': data.city
};
await csvModel.upsert(data, condition);
})
// await restofthestuff();
} catch (error) {
console.log("error", error);
}
为了测试,我使用了一个需要更新所有数据的数据集。
当我运行这个方法时:
我可以在(以及打开的续集日志)日志中看到,"existing record updated" 消息为存在的每条记录打印,这是所需的输出。只有最后几个 (30) 数据在数据库中得到更新。它适用于 csv.create(values)
~ 我怎样才能更新所有记录,显然不仅仅是最后 30 条数据,感谢任何帮助。 ~
编辑:显然我通过使用
csv.update(values, {where: condition})而不是使用obj.update(values)来实现这一点。新问题:我没有进一步研究 sequelize 的更新方法,但这是一个错误还是我在这里做错了什么?
【问题讨论】:
标签: mysql node.js promise async-await sequelize.js