对 PostgreSQL 中 jsonb 字段内的对象数组使用 LIKE 运算符
Posted
技术标签:
【中文标题】对 PostgreSQL 中 jsonb 字段内的对象数组使用 LIKE 运算符【英文标题】:Using LIKE operator for array of objects inside jsonb field in PostgreSQL 【发布时间】:2016-01-04 17:38:27 【问题描述】:是否可以在 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】:尝试使用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)
【讨论】:
以上是关于对 PostgreSQL 中 jsonb 字段内的对象数组使用 LIKE 运算符的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL:如何对包括 JSONB 字段的属性求和,并保留表格形状?
PostgreSQL中jsonb字段里逗号分隔的多选字段拆分匹配另一张表