如何在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
相关产品推荐
相关产品推荐

