我正在尝试从表中获取简化的(过滤后的)JSON数组
考虑以下示例
CREATE TABLE "public"."test_data" (
"id" uuid NOT NULL DEFAULT uuid_generate_v4(),
"a_field" jsonb NOT NULL,
PRIMARY KEY ("id")
);
INSERT INTO test_data (a_field) VALUES
('[ {"id": 1, "value": 100}, {"id": 2, "value": 200}, {"id": 2, "value": 50} ]');
存储在test_data.a_field
字段中的数据结构是{ id: number, value: number }
个对象的数组。
鉴于上面的示例,我需要获取对象的特定id
的数据,所以代替此
[ {"id": 1, "value": 100}, {"id": 2, "value": 200}, {"id": 2, "value": 50} ]
我能得到这个吗?
[ {"id": 2, "value": 200}, {"id": 2, "value": 50} ]
请帮助。
答案 0 :(得分:2)
您可以连续使用jsonb_array_elements()
和jsonb_agg()
函数:
SELECT jsonb_agg(js) as a_field_new
FROM
(
SELECT jsonb_array_elements(a_field) as js
FROM test_data
) q
WHERE js->> 'id' = '2'
不带子查询的OR:
SELECT jsonb_agg(value) as a_field_new
FROM test_data
CROSS JOIN jsonb_array_elements(a_field)
WHERE value->> 'id' = '2'