对于PostgreSQL 9.4中的jsonb字段,是否可以将LIKE运算符用于对象数组内的单个键/值?例如,我有:
id | body
------------------------------------------------------------
1 | {"products": [{"name": "qwe", "description": "asd"}, {"name": "zxc", "description": "vbn"}]}
我知道,我可以通过以下方式获得product
:
select * from table where 'body'->'products' @> '[{"name": "qwe"}]'::jsonb
问题是:如果我不知道它的全名,我可以得到这个产品吗?
答案 0 :(得分:1)
尝试使用jsonb_each()
函数获取key
和value
:
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)