如何遍历 jsonb 对象数组以获取对象 Postgres 中的键值
How to loop through jsonb array of objects to get values of keys within objects Postgres
我使用的是 Postges 9.4,我有一个 table,它有一个 jsonb
字段作为对象数组。
这是一个示例字段:
[{"pk": 224, "arbitrary_value": 50, "description": "United States"}, {"pk": 125, "arbitrary_value": 10, "description": "Canada"}]
在此数组字段中,有两个对象。但它是可变长度的。
我有一个如下所示的查询:
select jsonb
, array_agg( ... )
from public.jsonb_data
在 array_agg(...)
列中,我需要能够 return 包含在 jsonb
字段的每个对象中的 pk
值的数组。
结果集应该类似于:
| jsonb | array_agg |
| ----- | --------- |
| [{"pk": 224, "arbitrary_value": 50, "description": "United States"}, {"pk": 125, "arbitrary_value": 10, "description": "Canada"}] | {224,125} |
抱歉,不确定如何在此编辑器中制作 tables...
我曾尝试使用 Postgres 9.4 中可用的各种 jsonb
运算符,但如果有人知道,我希望得到任何指示。
尤里卡!
我找到了,使用 jsonb_to_recordset()
函数。
这是我的查询:
select primary_key
, array_agg(e.pk)
from public.jsonb_data, jsonb_to_recordset(jsonb_field) as e( pk int )
group by primary_key
order by primary_key
这给了我一个完美的输出:
| Primary Key | jsonb_array |
| ----------- | ----------- |
| 1 | {224,152} |
| 2 | {224,186} |
| 3 | {224} |
希望这对某人有所帮助...
我使用的是 Postges 9.4,我有一个 table,它有一个 jsonb
字段作为对象数组。
这是一个示例字段:
[{"pk": 224, "arbitrary_value": 50, "description": "United States"}, {"pk": 125, "arbitrary_value": 10, "description": "Canada"}]
在此数组字段中,有两个对象。但它是可变长度的。
我有一个如下所示的查询:
select jsonb
, array_agg( ... )
from public.jsonb_data
在 array_agg(...)
列中,我需要能够 return 包含在 jsonb
字段的每个对象中的 pk
值的数组。
结果集应该类似于:
| jsonb | array_agg |
| ----- | --------- |
| [{"pk": 224, "arbitrary_value": 50, "description": "United States"}, {"pk": 125, "arbitrary_value": 10, "description": "Canada"}] | {224,125} |
抱歉,不确定如何在此编辑器中制作 tables...
我曾尝试使用 Postgres 9.4 中可用的各种 jsonb
运算符,但如果有人知道,我希望得到任何指示。
尤里卡!
我找到了,使用 jsonb_to_recordset()
函数。
这是我的查询:
select primary_key
, array_agg(e.pk)
from public.jsonb_data, jsonb_to_recordset(jsonb_field) as e( pk int )
group by primary_key
order by primary_key
这给了我一个完美的输出:
| Primary Key | jsonb_array |
| ----------- | ----------- |
| 1 | {224,152} |
| 2 | {224,186} |
| 3 | {224} |
希望这对某人有所帮助...