PostgreSQL json搜索

时间:2016-06-06 11:06:09

标签: json postgresql jsonb

我正在考虑在postgres jsonb数据类型中存储一些数据。会有像

这样的结构
{"name": "Jhon Smith", "emails": ["smith@test.com", "agent@matrix.net"],
 "phones": ["123456789", "987654321"]}.

我知道,我可以像

那样搜索这个结构
where contact->'emails' @> '"smith@test.com"'::jsonb;

但我需要的是用一些LIKE运算符搜索我的数据,所以

where contact->'emails' <SOME_JSON_LIKE_OPERATOR> "smith"';

我无法找到psql是否有类似的东西,也许它没有。所以,也许我可以转换联系方式&gt;&#39;电子邮件&#39;字段到文本(&#39; [&#34; smith@test.com",&#34; agent@matrix.net"]&#39;)然后使用简单的LIKE ..你怎么样?已经解决了这个问题?

1 个答案:

答案 0 :(得分:3)

您可以将json数组扩展为文本记录集,并以您喜欢的任何方式搜索:

where exists (
    select 1 from json_array_elements_text(contact->'emails')
    where 
        value like "%smith%"
    )