gpt4 book ai didi

javascript - 使用 sequelize 用不同的值一次更新多条记录

转载 作者:行者123 更新时间:2023-12-03 22:31:06 26 4
gpt4 key购买 nike

我有一个 RESTful API。我正在尝试使用不同的值更新保存在我的 MySQL 数据库中的几条记录。我正在通过 Sequelize 开发它。

const input = [
{
id: 'id-1',
field1: 'data0',
field2: 'data1',
field3: 'data2',
},
{
id: 'id-2',
field1: 'data3',
field2: 'data4',
field3: 'data5',
},
];

for (let i = 0; i < input.length; i++) {
const element = input[i];

await <database_manager>.<name-table>.update(element,
{ where: { id: element.id } },
);
}
有没有更好的方法来实现这种类型的更新?或者循环是更好的方法吗?

最佳答案

要一次更新多条记录(来自同一个表/模型),您可以使用 Model.bulkUpdate() 。请注意,默认情况下,批量 Hook 将运行,但“单个” Hook 不会运行,除非您在选项中指定 individualHooks: true。您可能还想指定 validate: true 来触发任何自定义验证器。
如果您想同时更新多个表/模型,您应该将它们传递给 Promise.all() 以异步解析它们。关于您问题中的示例 - 您通常希望避免在 await 循环中使用 for 。这将导致它按顺序运行 Promises(异步),有效地使它们同步。如果每个 db 调用需要 1 秒,而您进行 3 次调用,则总时间约为 3 秒。如果您使用以下代码同时运行它们,您应该会看到总时间约 1 秒 - 快 3 倍。

const inputs = [
{
model: 'TableOne',
data: {
id: 'id-1',
field1: 'data0',
field2: 'data1',
field3: 'data2',
},
},
{
model: 'TableTwo',
data: {
id: 'id-2',
field1: 'data3',
field2: 'data4',
field3: 'data5',
},
},
];

// loop over the inputs and return an array of promises, one for each update
const promises = inputs.map(input) => {
const { model, data } = input;
return db[model].update(data, { where: { id: data.id } });
});
// resolve all the db calls at once
await Promise.all(promises);

关于javascript - 使用 sequelize 用不同的值一次更新多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66847214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com