在sequelize where子句(JSON列)中使用ILIKE
我有一个JSON列,其中存储了如下数据-在sequelize where子句(JSON列)中使用ILIKE,json,node.js,postgresql,sequelize.js,Json,Node.js,Postgresql,Sequelize.js,我有一个JSON列,其中存储了如下数据- { tag : ["as","bs","cs"] } 我想用ILIKE在这个列中搜索,我相信JSON数据类型只是字符串,所以我使用了如下查询- SELECT * FROM public."Transactions" WHERE tags::text ILIKE '%as%' 上述查询在sql中运行良好 我需要使用sequelize模型来实现此功能,但没有成功 代码我使用的是 let searchQuery = [ {
{ tag : ["as","bs","cs"] }
我想用ILIKE
在这个列中搜索,我相信JSON数据类型只是字符串,所以我使用了如下查询-
SELECT * FROM public."Transactions" WHERE tags::text ILIKE '%as%'
上述查询在sql中运行良好
我需要使用sequelize模型来实现此功能,但没有成功
代码我使用的是
let searchQuery = [
{
payee: {
[Op.iLike]: '%' + search + '%'
}
},
{
tags: {
[Op.iLike]: '%as%'
}
}
];
给出的错误为
未处理的拒绝SequelizeDatabaseError:运算符不存在:
json~~*未知
检查操作符列表-没有~
-ILIKE
不适用于json。您必须将json强制转换为文本:
t=# select '{ "tag" : ["as","bs","cs"] }'::json::text ilike '%as%';
?column?
----------
t
(1 row)
或使用本机运算符:
t=# select ('{ "tag" : ["as","bs","cs"] }'::json)->'tag'->>0 = 'as';
?column?
----------
t
(1 row)
或者,如果您是9.5及以上版本的用户,请将其转换为jsonb并使用其强大的运算符:
t=# select '{ "tag" : ["as","bs","cs"] }'::json::jsonb @> '{"tag":["as"]}'::jsonb;
?column?
----------
t
(1 row)