如何从 Postgres 中的 Json 字段查询 select JsonArray
How to query select JsonArray from Jsonb field in Postges
我有一个问题需要你的帮助。我想通过 id.
从 JsonArray 查询 select 数据
- Table(产品)
id(int4)| data(jsonb) | category__id
- 字段数据包含如下JsonArray
{
"item": [
{
"id": 1,
"name": "hawai",
"size": {
"L": 0.5,
"M": 0.15,
"S": 0.25
},
"price": 10,
"rating": 10,
},
{
"id": 2,
"name": "koka kola",
"size": {
"L": 0.15,
"M": 0.25,
"S": 0.35
},
"price": 20,
"rating": 100
}
]
}
- 我的查询
select * from product where data->'item'->>'id'=1
- 预期输出
但查询结果显示包含字段“数据”的所有记录
它不符合我的喜好。我只想要 id=1
的数据
这可以使用 jsonb_path_query_array()
来完成
select id, jsonb_path_query_array(data, '$.item[*] ? (@.id == 1)'), category_id
from product;
虽然这与您的图片显示的不完全相同:它不包含 "item"
键:
[{"id": 1, "name": "hawai", "size": {"L": 0.5, "M": 0.15, "S": 0.25}, "price": 10, "rating": 10}]
试试这个:
select id,
json_build_object('item',array_to_json(array_agg(item))),
category_id
from (
select id, jsonb_array_elements(data->'item') as "item", category_id
from example ) tab
where cast(item->>'id' as int)=1
group by id,category_id
我有一个问题需要你的帮助。我想通过 id.
从 JsonArray 查询 select 数据- Table(产品)
id(int4)| data(jsonb) | category__id
- 字段数据包含如下JsonArray
{
"item": [
{
"id": 1,
"name": "hawai",
"size": {
"L": 0.5,
"M": 0.15,
"S": 0.25
},
"price": 10,
"rating": 10,
},
{
"id": 2,
"name": "koka kola",
"size": {
"L": 0.15,
"M": 0.25,
"S": 0.35
},
"price": 20,
"rating": 100
}
]
}
- 我的查询
select * from product where data->'item'->>'id'=1
- 预期输出
但查询结果显示包含字段“数据”的所有记录 它不符合我的喜好。我只想要 id=1
的数据这可以使用 jsonb_path_query_array()
select id, jsonb_path_query_array(data, '$.item[*] ? (@.id == 1)'), category_id
from product;
虽然这与您的图片显示的不完全相同:它不包含 "item"
键:
[{"id": 1, "name": "hawai", "size": {"L": 0.5, "M": 0.15, "S": 0.25}, "price": 10, "rating": 10}]
试试这个:
select id,
json_build_object('item',array_to_json(array_agg(item))),
category_id
from (
select id, jsonb_array_elements(data->'item') as "item", category_id
from example ) tab
where cast(item->>'id' as int)=1
group by id,category_id