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

如何在Sequelize中查询JSONB字段内数组中的unit_id?

Sequelize JSONB数组查询问题解决方法

你定义的Facility模型包含JSONB类型的criteria列,其中unit_id是数组结构,要查询unit_id包含003的记录,原写法失败的原因是**Op.contains用于JSONB数组匹配时,需要传入数组而非单个字符串**,以下是几种正确的查询方式:

方法一:使用Op.contains(推荐)

直接针对criteria.unit_id数组进行包含匹配,注意将目标值包裹为数组:

const { Op } = require('sequelize');

Facility.findAll({
  where: {
    criteria: {
      unit_id: {
        [Op.contains]: ['003']
      }
    }
  }
});

方法二:使用原生JSONB操作符

如果需要更灵活的原生SQL写法,可以直接使用PostgreSQL的JSONB操作符@>:

Facility.findAll({
  where: sequelize.literal("criteria->'unit_id' @> '[\"003\"]'::jsonb")
});

方法三:使用Op.any匹配数组元素

通过Op.any判断数组中是否存在目标值:

const { Op } = require('sequelize');

Facility.findAll({
  where: {
    [Op.and]: [
      sequelize.where(sequelize.col('criteria->unit_id'), { [Op.any]: ['003'] })
    ]
  }
});

内容的提问来源于stack exchange,提问作者C. Yee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:10:02