在PostgreSQL中使用LIKE运算符作为jsonb字段内的对象数组

时间:2016-01-04 17:38:28

标签: postgresql sql-like postgresql-9.4 jsonb

对于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

问题是:如果我不知道它的全名,我可以得到这个产品吗?

1 个答案:

答案 0 :(得分: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)