这个
jsonb_path_query()
函数可以这样做:
demo at db<>fiddle
create table your_table(
id int generated by default as identity primary key
,metadata jsonb);
insert into your_table(metadata) values
('{"key1": "value1",
"key2": [ {"key3": "value3"}
,{"key3": "value4"} ]
}')
,('{"key3": "value5",
"key2": [ {"key4": {"key3": "value6"}} ]
}');
SELECT jsonb_path_query(metadata,'strict $.**.key3')
FROM your_table
WHERE metadata @? '$.**.key3';
jsonb_path_query
|
“值3”
|
“值4”
|
“值5”
|
“价值6”
|
-
$
是jsonb结构的根
-
.**
意味着考虑了结构的所有层次
-
.key3
返回在任何级别上找到的该键下的值
-
strict
mode
防止重复
value3
和
value4
由于访问而将返回
key2
否则默认情况下数组两次
lax
模式
-
WHERE metadata @? '$.**.key3'
条件使用a
index
仅搜索具有以下条件的行
key3
在他们的任何地方