如何从 Postgres 中的 Json 字段查询 select JsonArray

How to query select JsonArray from Jsonb field in Postges

我有一个问题需要你的帮助。我想通过 id.

从 JsonArray 查询 select 数据
  1. Table(产品)

id(int4)|         data(jsonb)        |       category__id

  1. 字段数据包含如下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
    }
 ]
}
  1. 我的查询
select * from product where data->'item'->>'id'=1
  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 

Demo