2017-05-24 75 views
0

如何基于作为数组一部分的对象中的某个键获取某个值?我存储我的Postgres里面的json数据jsonb 9.6 DBPostgreSQL:获取jsonb数组内部对象的值以进行全文搜索

addresses (JSONB) 
--------- 
[{"address":"[email protected]", "type": "home"}, {"address":"[email protected]", "type": "work"}] 

我很想做的是一样的东西:

SELECT addresses ->> 'address' FROM foo 

,然后使用结果的全文检索,我在那里搜索就像一个特定的电子邮件地址:

SELECT * FROM foo WHERE 
to_tsvector('simple', CAST(addresses ->>'address' as text)) @@ to_tsquery('abc:*'); 

我得到的,当我运行的第一个查询是:(NULL)

回答

1

你应该unnest json阵列使用jsonb_array_elements():

with foo(addresses) as (
values 
    ('[{"address":"[email protected]", "type": "home"}, {"address":"[email protected]", "type": "work"}]'::jsonb) 
) 

select value->>'address' as address 
from foo, 
jsonb_array_elements(addresses) 
where to_tsvector('simple', value->>'address') @@ to_tsquery('abc:*'); 

    address 
------------- 
[email protected] 
(1 row) 
+0

谢谢你,你的答案为我工作。 –

相关问题