如何将含JSON_SEARCH的MariaDB原生SQL转换为Sequelize查询
Sequelize 实现 MariaDB JSON_SEARCH 查询方案
以下是两种兼容原SQL逻辑的实现方式:
方式1:使用sequelize.fn调用原生函数(符合Sequelize规范)
首先引入运算符依赖:
const { Op } = require('sequelize');
查询代码示例(假设对应表的模型名为Table):
const result = await Table.findAll({ where: { [Op.and]: [ sequelize.where( sequelize.fn('JSON_SEARCH', sequelize.col('attributes'), 'all', 'X'), Op.like, '"$[%].value1"' ), sequelize.where( sequelize.fn('JSON_SEARCH', sequelize.col('attributes'), 'all', 'Y'), Op.like, '"$[%].value2"' ) ] } });
方式2:使用sequelize.literal写原生条件(写法更简洁)
如果是动态查询参数,建议使用replacements避免SQL注入风险:
// 动态查询参数示例 const val1 = 'X'; const val2 = 'Y'; const result = await Table.findAll({ where: sequelize.literal(` JSON_SEARCH(attributes,'all', ?) like '"$[%].value1"' AND JSON_SEARCH(attributes,'all', ?) like '"$[%].value2"' `), replacements: [val1, val2] });
补充说明
JSON_SEARCH属于MariaDB/MySQL专属的原生函数,Sequelize通用文档不会单独收录这类数据库特有函数的用法,所有原生数据库函数都可以通过上述两种方式调用。
内容的提问来源于stack exchange,提问作者Razvan V
相关产品推荐
相关产品推荐

