You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Sequelize的queryInterface.bulkUpdate检查jsonb列是否存在指定键

方案1:使用Sequelize.literal拼接原生SQL(最稳妥,和你目标SQL逻辑完全对齐)

这种写法直接复用已验证的SQL条件,不需要额外记忆Sequelize操作符映射规则:

'use strict';

module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.bulkUpdate(
      'messages', 
      { type: 'products' }, 
      // WHERE条件配置
      {
        type: 'gallery',
        [Sequelize.Op.and]: Sequelize.literal(`content ? 'textMain'`)
      }
    )
  },

  down: async (_queryInterface, _Sequelize) => {
    // 回滚逻辑按需补充
  }
};

注意:你原SQL中content ? '%textMain%'的写法存在误区:PostgreSQL的?运算符仅用于判断JSONB顶层是否存在指定字符串的键,不支持LIKE通配符。如果你的需求是模糊匹配JSONB字段内的任意字符串,需要将条件改为content::text LIKE '%textMain%',替换Sequelize.literal内的内容即可。


方案2:使用Sequelize内置JSONB操作符

PostgreSQL的?运算符在Sequelize中对应的操作符是Op.hasKey,写法更符合ORM编码规范:

'use strict';

module.exports = {
  up: async (queryInterface, Sequelize) => {
    // 解构获取Sequelize操作符
    const { Op } = Sequelize;
    await queryInterface.bulkUpdate(
      'messages', 
      { type: 'products' }, 
      {
        type: 'gallery',
        content: {
          [Op.hasKey]: 'textMain'
        }
      }
    )
  },

  down: async (_queryInterface, _Sequelize) => {
    // 回滚逻辑按需补充
  }
};

内容的提问来源于stack exchange,提问作者Raphael Monteiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:06:04