You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何提取JSONB数组所有指定字段的值?

解决方法

方法1:展开数组后聚合

你可以用jsonb_array_elements函数把数组拆分成单个JSON对象,提取每个对象的age值后再聚合为数组:

如果要得到PostgreSQL原生数组格式({10,20}):

SELECT array_agg((elem ->> 'age')::integer) AS ages
FROM jsonb_array_elements('{"a": [{"age":10},{"age":20}]}'::jsonb -> 'a') AS elem;

如果要得到JSON数组格式([10,20],和你期望的结果一致):

SELECT json_agg(elem -> 'age') AS ages
FROM jsonb_array_elements('{"a": [{"age":10},{"age":20}]}'::jsonb -> 'a') AS elem;

方法2:使用JSON路径查询(PostgreSQL 12+)

从PostgreSQL 12开始支持JSON路径查询,用jsonb_path_query_array可以直接提取数组中所有匹配路径的值,写法更简洁:

SELECT jsonb_path_query_array('{"a": [{"age":10},{"age":20}]}'::jsonb, '$.a[*].age');

这条语句会直接返回[10,20],完全符合你的需求。

为什么*运算符不生效?

PostgreSQL的->运算符只支持明确的键名或数组索引,不支持通配符匹配。要实现批量提取,必须借助专门的JSON处理函数(比如jsonb_array_elements)或者JSON路径语法([*]通配符在路径查询中是支持的)。

内容的提问来源于stack exchange,提问作者David542

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 20:10:50