首页 > 解决方案 > 获取 jsonb 数组中具有相同键的所有对象的列表

问题描述

我有一个表mytable和一个 JSONB 列employees,其中包含如下数据:

[      {
         "name":"Raj",
         "email":"raj@gmail.com",
         "age":32
          
},
      {
         "name":"Mohan",
         "email":"Mohan@yahoo.com",
         "age":21
          
        }   
]

我想只提取名称并将它们保存为列表格式,因此生成的单元格将如下所示:

['Raj','Mohan']

我试过了

select l1.obj ->> 'name' names
from mytable t
cross join jsonb_array_elements(t.employees)   as l1(obj)

但这仅返回第一个数组元素的名称。如何获取所有数组元素的名称?谢谢!

PostgreSQL 11.8

标签: sqlpostgresqljsonb

解决方案


在 Postgres 12 中,您可以使用jsonb_path_query_array()

select jsonb_path_query_array(employees, '$[*].name') as names
from mytable

在早期版本中,您需要取消嵌套然后聚合回来:

select (select jsonb_agg(e -> 'name') 
        from jsonb_array_elements(employees) as t(e)) as names
from mytable

推荐阅读