2017-07-24 229 views
0

我正在寻找一种方法来仅更新jsonb列中的嵌套键/值。
这里是User型号:JSONB中的Sequelize更新嵌套属性

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} 
} 

我想用一个update查询email.verified财产更新到true

我尝试以下代码:

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进行单个更新查询?

回答

1

是的,你可以使用单个更新查询更新一个带有sequelize的嵌套json属性,但是你必须使用原始查询。

sequelize.query(`UPDATE users SET data = jsonb_set(data, '{email,verified}', 'true', true) WHERE id = 1`);