我试图在postgres数据库中的行上使用sequelize执行更新命令。我需要能够使用相同的值更新具有不同条件的多个行。
例如,假设我有一个包含以下字段的用户表:
假设我在这张表中有4条记录,我想更新ID为1的记录和4,新的位置是尼日利亚。
这样的事情:SET field1 = 'foo' WHERE id = 1, SET field1 = 'bar' WHERE id = 2
如何用sequelize实现这一目标?
答案 0 :(得分:6)
您可以一次更新多条记录,但所有记录的更新都相同 ,如果你想为不同的条件做出不同的更新,那么你必须多次运行
示例:
这会将fields1
更新为foo,其中id
为1或4
let ids = [1,4];
Your_model.update({ field1 : 'foo' },{ where : { id : ids }});
如果field1
为1,则会将id
更新为foo;如果field1
为4,则id
会更新为
Your_model.update({ field1 : 'foo' },{ where : { id : 1 }});
Your_model.update({ field1 : 'bar' },{ where : { id : 4 }});
希望这能清除你所有的疑虑。
答案 1 :(得分:2)
我们计划为多行中的相同字段保存不同的值,有可能使数据库中的所有字段值都相同。 使用for循环
const {idArray,group_id} = params;
for(const item of idArray){
const response = await Your_model.findOne({ where:{group_id,user_id:null}, order: [['id', 'DESC']] });
await response.update({user_id:item});
}
答案 2 :(得分:1)
您可以根据条件更新多行,并且这样做对操作员很有帮助。
查看此处:http://docs.sequelizejs.com/manual/querying.html(操作员)
const { Op } = Sequelize;
DisplayMedia.update(
{
field: 'bar'
},
{
where: {
id: {
[Op.in]: [1, 10, 15, ..] // this will update all the records
} // with an id from the list
}
}
)
有各种各样的运算符,包括范围运算符或类似的运算符... etc
更新时的重要问题之一是如何更新所有行?
不包含where
会导致错误“ 在传递给更新的options参数中缺少where属性”。
答案在下面的代码中:为where
提供一个空对象。
await DisplayMediaSequence.update({
default: false
}, {
where: {}, // <-- here
transaction
});
await DisplayMediaSequence.update({
default: true <-- after all turned to false, we now set the new default. (that to show a practical expample) -->
}, {
where: {
id
},
transaction
});