如何使用单独列的嵌套JSONB值更新指定目标列
实现方案
你需要在col()方法中直接使用PostgreSQL原生的JSONB属性取值语法,正确代码如下:
const { col } = require('sequelize'); await UserActivity.update( { type: col(`activity->>'type'`) }, { where: { activity: { id: 4285299988 } } } );
补充说明
- PostgreSQL针对JSONB类型提供了两个常用取值操作符:
->:取到的结果为JSONB类型->>:取到的结果为文本字符串类型
- 如果你的
type字段是数值、布尔等非字符串类型,可以对取值结果做强制类型转换,比如取整的写法为col("(activity->>'type')::int") - 如果需要批量更新全表所有行的
type字段,直接删除where条件即可 - 也可以用
sequelize.literal替换col实现相同效果,写法为type: sequelize.literal("activity->>'type'")
内容的提问来源于stack exchange,提问作者Bryson Kruk
相关产品推荐
相关产品推荐

