我正在使用sequelize(v3.12.2),pg(4.4.3),PostgreSQL(v9.4)和Node(v4。 1.2)。
我有一个包含JSONB数据类型字段的模型。
var User = {
data: {
type: Sequelize.JSONB
}
现在我可以做到
User.findOne({where: {id: 12345}})
.update({data: {x: 'foo'}});
和
User.findOne({where: {id: 12345}})
.update({'data.y': 'bar'});
现在,如果我只想删除data.x
属性,我该如何在一个命令中执行此操作?
User.findOne({where: {id: 12345}})
.update({'data.x': null});
显然不起作用。实际上,生成的数据对象应该是:
{y: 'bar'}
而不是:
{x: null, y: 'bar'}
我如何用Sequelize做到这一点?谢谢你的帮助!
答案 0 :(得分:2)
我认为下面应该可以使用
User.findOne({where: {id: 12345}})
.update({'data': sequelize.literal("data - 'x' ")});
还没有测试过,但是如果不起作用,请告诉我。解决方案将仅遵循这些原则
答案 1 :(得分:2)
如果@Tarun Lalwani的代码不起作用,可能是 您的Postgresql 9.4不支持“-”操作。
在这种情况下,创建功能或升级到9.5+是您的选择。
答案 2 :(得分:-1)
尝试一下:
User.update({
"data": sequelize.literal("data - 'x' ")
}, {
where: {
id: 12345
}
});