在sequelize where子句中使用ILIKE(JSON列)

时间:2018-01-31 07:31:13

标签: json node.js postgresql sequelize.js

我有JSON列,我存储了像

这样的数据
{ tag : ["as","bs","cs"] }

我想在ILIKE内搜索此专栏,我相信JSON数据类型只是字符串,因此我使用了查询 -

SELECT * FROM public."Transactions" WHERE tags::text ILIKE '%as%'

上面的查询在sql

中工作正常

我需要使用续集模型来实现这一点,但没有成功 代码我用的是

    let searchQuery = [
        {
            payee: {
                [Op.iLike]: '%' + search + '%'
            }
        },
        {
            tags: {
                [Op.iLike]: '%as%'
            }
        }
    ];

错误为

  

未处理的拒绝SequelizeDatabaseError:运算符不存在:   json ~~ *未知

1 个答案:

答案 0 :(得分:1)

https://www.postgresql.org/docs/current/static/functions-json.html

检查运营商列表 - 没有~~ - 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)

https://www.postgresql.org/docs/current/static/functions-json.html