我正在寻找一种只更新jsonb
列中嵌套键/值的方法
这是User
模型:
const User= sequelize.define('User', {
id: DataTypes.INTEGER,
name:DataTypes.STRING,
// other fields
data: DataTypes.JSONB
});
当前data
列值:
{
'email':{'verified':false,'token':'random token'},
'phone:{'verified':true}
}
我想使用单个 email.verified
查询将true
属性更新为update
。
我尝试了以下代码:
models.User.update({'data.email.verified':true},
{where:{id:1}}).then()...
models.User.update({data:{email:{verified:true}}},
{where:{id:1}}).then()...
更新的列将是:
{
'email':{'verified':true},
}
我也试过这个:
models.User.findById(1).then(user => {
user.set('data.email.verified', true);
user.save().then()...
});
这可行,但我不想执行两个查询(选择然后更新)以仅更新字段。
是否可以使用sequelize
使用单个更新查询执行此操作?
答案 0 :(得分:3)
是的,您可以使用单个更新查询使用sequelize更新嵌套的json属性,但必须使用原始查询。
sequelize.query(`UPDATE users SET data = jsonb_set(data, '{email,verified}', 'true', true) WHERE id = 1`);
答案 1 :(得分:0)
model.yourJsonB.userName
model.yourJsonB.userName = "Lisa" // traditional prop change
model.changed("yourJsonB",true) //< forces sequelize to understand this json has be updated
model.save()
我在文档中找到了资源: https://sequelize.org/master/manual/upgrade-to-v6.html