postgresql - Postgres JSONB 数据类型 - 如何从 postgres 数据库的 JSON(JsonB 类型)字段中提取数据?
问题描述
您好朋友, 我需要帮助来解决以下问题,
我在我的 postgres 数据库表中设置了记录,其中表具有JSONB
类型字段。
JSONB
类型列包含以下内容JSON
,
记录#1:-
{
"key1": "value1",
"key2": "value2",
"audience": [
{
"name": "Person1",
"email": "test1@mail.com",
"country": "UK",
"primaryNumber": "+1234567890",
"secondaryNumber": "+1234567890"
},
{
"name": "Person2",
"email": "test2@mail.com",
"country": "UK",
"primaryNumber": "+1234567890",
"secondaryNumber": "+1234567890"
}
]
}
记录#2:-
{
"key1": "value1",
"key2": "value2",
"audience": [
{
"name": "Person3",
"email": "test3@mail.com",
"country": "UK",
"primaryNumber": "+1234567890",
"secondaryNumber": "+1234567890"
},
{
"name": "Person4",
"email": "test4@mail.com",
"country": "UK",
"primaryNumber": "+1234567890",
"secondaryNumber": "+1234567890"
}
]
}
预期结果(吸引所有观众):-
[
{
"name": "Person1",
"email": "test1@mail.com",
"country": "UK",
"primaryNumber": "+1234567890",
"secondaryNumber": "+1234567890"
},
{
"name": "Person2",
"email": "test2@mail.com",
"country": "UK",
"primaryNumber": "+1234567890",
"secondaryNumber": "+1234567890"
},
{
"name": "Person3",
"email": "test3@mail.com",
"country": "UK",
"primaryNumber": "+1234567890",
"secondaryNumber": "+1234567890"
},
{
"name": "Person4",
"email": "test4@mail.com",
"country": "UK",
"primaryNumber": "+1234567890",
"secondaryNumber": "+1234567890"
}
]
任何人都可以帮我设计一个查询吗native query
?spring-data-jpa
如果有人可以帮助我摆脱这种情况,我真的很感激!
解决方案
您应该提取'audience'
每行的数组元素jsonb_array_elements()
并将它们聚合到单个 json 对象中jsonb_agg()
:
select jsonb_agg(value)
from my_table
cross join jsonb_array_elements(json_data->'audience')
推荐阅读
- git - Git checkout 只在某些机器上给我指针文件
- sql - 使用存储过程返回 0 行的 SSRS 报告
- ios - 为 UIBezierPath 创建旋转动画
- r - 按 ID 组合行
- arduino - Serial.read 返回值与串行监视器中的值不同
- docker - 对独立容器使用覆盖网络会引发超出上下文期限
- reactjs - 登录 React 后重定向到自定义 URL
- botframework - 当您缺乏添加所需范围的权限时,有没有办法使用 To Do Skill
- javascript - 正则表达式:具有数组支持的拆分对象表示法路径字符串
- php - Laravel JSON Where 子句中带有数字的键