postgresql - Postgres JSONB 数据类型 - 如何从 Postgres 数据库的 JSON(JsonB 类型)字段中提取数据?

标签 postgresql spring-data-jpa jsonb

friend 们好, 我需要帮助来解决以下问题,

我在我的 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 的查询吗?

如果有人能帮助我摆脱这种情况,我真的很感激!

最佳答案

您应该使用 jsonb_array_elements() 提取每一行的 'audience' 数组元素,并使用 jsonb_agg() 将它们聚合到单个 json 对象>:

select jsonb_agg(value)
from my_table
cross join jsonb_array_elements(json_data->'audience')

Working example in rextester.

关于postgresql - Postgres JSONB 数据类型 - 如何从 Postgres 数据库的 JSON(JsonB 类型)字段中提取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52182986/

相关文章:

PostgreSQL:row_number:错误:列 "rn"不存在

sql - 如何在 PostgreSQL 中使用循环序列执行排序

json - PostgreSQL 递归行到 JSONB 映射

java - 如何使用 Spring Data REST 公开可写的 REST api?

java - 如何根据实体接口(interface)声明存储库?

ruby-on-rails - 将键值推送到 jsonb 字段

python - SQLAlchemy/PostgreSQL 可变、去重数组

java - 从数据库中删除值-Spring MVC,数据JPA

java - 有没有一种方法可以使用嵌入式数据库来测试 Postgres Jsonb 查询以进行单元测试?

sql - 在 Postgres 上的关系表上聚合 Json 对象