2016-01-04 65 views
0

在PostgreSQL 9.4中,對於jsonb字段的對象數組中的單個鍵/值是否可以使用LIKE運算符?例如,我有:在PostgreSQL中對jsonb字段內的對象數組使用LIKE運算符

id |     body                
------------------------------------------------------------ 
    1 | {"products": [{"name": "qwe", "description": "asd"}, {"name": "zxc", "description": "vbn"}]} 

我知道,我可以得到一個product像這樣的東西:

select * from table where 'body'->'products' @> '[{"name": "qwe"}]'::jsonb 

的問題是:我能得到這個產品,如果我不知道全名它?

回答

1

嘗試使用jsonb_each()函數來獲取keyvalue

WITH json_test(data) AS (VALUES 
    ('{"products": [{"name": "qwe", "description": "asd"}, {"name": "zxc", "description": "vbn"}]}'::JSONB) 
) 
SELECT doc.key,doc.value 
FROM json_test jt, 
    jsonb_array_elements(jt.data->'products') array_elements, 
    jsonb_each(array_elements) doc 
WHERE 
    doc.key = 'name' 
AND 
    doc.value::TEXT LIKE '%w%'; 

輸出將是如下:

key | value 
------+------- 
name | "qwe" 
(1 row) 
相關問題