如何将 postgresql 中 jsonb_path_query 的结果聚合到数组中?
How can I aggregate the results of a jsonb_path_query in postgresql to an array?
我有一个包含两列的 table,包含一个 ID 和一个 JSON 对象 (jsonb)。每个 json 对象包含嵌套在对象内部某处的多个值(例如 url)。我可以使用 jsonb_path_query 使用 [*] 提取所有这些值,但它们被 return 编辑为每行一个值。如何聚合 return 值,使结果 table 的行数与原始行数相同?
示例如下:
CREATE TABLE IF NOT EXISTS test (
oid integer,
object jsonb
);
INSERT INTO test
VALUES
(1, '{"links": [
{"title": "a", "url": "w"},
{"title": "b", "url": "x"}
]}'),
(2, '{"links": [
{"title": "c", "url": "y"},
{"title": "d", "url": "z"}
]}');
SELECT
oid,
jsonb_path_query(object, '$.links[*].url')
FROM test;
select 查询 return 以下 table:
| oid | jsonb_path_query |
| --- | ---------------- |
| 1 | w |
| 1 | x |
| 2 | y |
| 2 | z |
不过,我想得到这个:
| oid | jsonb_path_query |
| --- | ---------------- |
| 1 | [w,x] |
| 2 | [y,z] |
使用 jsonb_path_query_array()
- 它 returns 所有匹配作为 (JSON) 数组
SELECT oid,
jsonb_path_query_array(object, '$.links[*].url')
FROM test;
oid | jsonb_path_query_array
----+-----------------------
1 | ["w", "x"]
2 | ["y", "z"]
我有一个包含两列的 table,包含一个 ID 和一个 JSON 对象 (jsonb)。每个 json 对象包含嵌套在对象内部某处的多个值(例如 url)。我可以使用 jsonb_path_query 使用 [*] 提取所有这些值,但它们被 return 编辑为每行一个值。如何聚合 return 值,使结果 table 的行数与原始行数相同?
示例如下:
CREATE TABLE IF NOT EXISTS test (
oid integer,
object jsonb
);
INSERT INTO test
VALUES
(1, '{"links": [
{"title": "a", "url": "w"},
{"title": "b", "url": "x"}
]}'),
(2, '{"links": [
{"title": "c", "url": "y"},
{"title": "d", "url": "z"}
]}');
SELECT
oid,
jsonb_path_query(object, '$.links[*].url')
FROM test;
select 查询 return 以下 table:
| oid | jsonb_path_query |
| --- | ---------------- |
| 1 | w |
| 1 | x |
| 2 | y |
| 2 | z |
不过,我想得到这个:
| oid | jsonb_path_query |
| --- | ---------------- |
| 1 | [w,x] |
| 2 | [y,z] |
使用 jsonb_path_query_array()
- 它 returns 所有匹配作为 (JSON) 数组
SELECT oid,
jsonb_path_query_array(object, '$.links[*].url')
FROM test;
oid | jsonb_path_query_array
----+-----------------------
1 | ["w", "x"]
2 | ["y", "z"]