对 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 运算符的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL:如何对包括 JSONB 字段的属性求和,并保留表格形状?

PostgreSQL 查询 JSONB 字段中的对象数组

如何获取 PostgreSQL jsonb 字段的大小?

PostgreSQL中jsonb字段里逗号分隔的多选字段拆分匹配另一张表

单个 postgresql 查询中的文本和 jsonb 连接

使用 Sequelize.js 和 PostgreSQL 在关联模型上查询 JSONB 字段