在不同条件下按顺序更新多行

pro*_*ton 4 javascript postgresql sequelize.js

我正在尝试对postgres数据库中的行执行更新命令。我需要能够使用相同的值更新具有不同条件的多行。

例如,假设我有一个包含以下字段的用户表:

  • ID
  • 名字
  • 性别
  • 地点
  • createdAt

假设我在此表中有4条记录,我想用ID为1的新位置更新ID为1和4的记录。

像这样: SET field1 = 'foo' WHERE id = 1, SET field1 = 'bar' WHERE id = 2

我如何通过续集实现这一目标?

Moh*_*lal 16

您可以根据您的条件更新多行,为此操作员非常有帮助。

看这里: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
        }
    }
)
Run Code Online (Sandbox Code Playgroud)

有各种各样的操作符,包括范围操作符,或者像操作符...等

更新时的重要问题之一是如何更新所有行?

不包括where导致错误“在传递给更新的选项参数中缺少 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
});
Run Code Online (Sandbox Code Playgroud)


Viv*_*shi 9

您可以一次更新多个记录,但是对所有记录都可以进行相同的更新,如果要针对不同的条件进行不同的更新,则必须多次运行

范例:

这将更新fields1为foo,其中id1或4

let ids = [1,4];
Your_model.update({ field1 : 'foo' },{ where : { id : ids }}); 
Run Code Online (Sandbox Code Playgroud)

这将更新field1,如果为foo id为1,field1以酒吧,如果id是4

Your_model.update({ field1 : 'foo' },{ where : { id : 1 }});
Your_model.update({ field1 : 'bar' },{ where : { id : 4 }}); 
Run Code Online (Sandbox Code Playgroud)

希望这能消除您的所有疑问。