对 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()函数获取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)

【讨论】:

以上是关于对 PostgreSQL 中 jsonb 字段内的对象数组使用 LIKE 运算符的主要内容,如果未能解决你的问题,请参考以下文章