2017-05-24 72 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

謝謝你,你的答案爲我工作。 –

相關問題