Sequelize:删除JSONB属性(使用PostgreSQL)

时间:2015-10-20 16:12:07

标签: node.js postgresql sequelize.js jsonb

我正在使用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做到这一点?谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

我认为下面应该可以使用

User.findOne({where: {id: 12345}})
  .update({'data': sequelize.literal("data - 'x' ")});

还没有测试过,但是如果不起作用,请告诉我。解决方案将仅遵循这些原则

答案 1 :(得分:2)

如果@Tarun Lalwani的代码不起作用,可能是 您的Postgresql 9.4不支持“-”操作。

在这种情况下,创建功能或升级到9.5+是您的选择。

请参阅 PostgreSQL: Remove attribute from JSON column

答案 2 :(得分:-1)

尝试一下:

User.update({
        "data": sequelize.literal("data - 'x' ") 
    }, {
        where: {
            id: 12345
        }
    });