在 JSON 数组中搜索包含与模式匹配的值的对象

jay*_*lee 5 sql postgresql json pattern-matching

我有一个带有一jsonb列的数据库,其中每一行本质上都包含一个名称值对数组。单个jsonb值的示例:

[
    {"name":"foo", "value":"bar"},
    {"name":"biz", "value":"baz"},
    {"name":"beep", "value":"boop"}
]
Run Code Online (Sandbox Code Playgroud)

如何查询包含部分值的行?即,查找具有 JSON 对象键value(如“%ba%”)的行?

我知道我可以用来SELECT * FROM tbl WHERE jsoncol @> '[{"value":"bar"}]'查找 JSON 是该特定值的行,但是我将如何查询包含模式的行?

kli*_*lin 2

jsonb_array_elements()您可以在横向连接中使用该函数并valueWHERE子句中使用其结果:

select distinct t.* 
from my_table t
cross join jsonb_array_elements(jsoncol)
where value->>'value' like '%ba%'
Run Code Online (Sandbox Code Playgroud)

请阅读如何使用 IN 运算符查询 jsonb 数组以获取有关注释distinct和性能的信息。