首页 > 解决方案 > Postgres jsonb_path_query 按长度过滤子数组

问题描述

在 Postgres 13.3 中,我想从一个jsonb值中提取特定长度的子数组:

select jsonb_path_query('[[0,1], [0,1,2]]'::jsonb, '$[*] ? (@.size() >= 3)');

但是,这不会返回任何内容(0 行)。

我究竟做错了什么?请注意,我想继续使用jsonpath- 虽然此示例已简化,但实际案例涉及更多,并且依赖于 jsonpath 表达式的灵活性。

标签: postgresqljson-path-expression

解决方案


将同时$[*]执行数组数组中的每个元素,因此分别计算0, 1, 0, 1,2

以下是诀窍

select jsonb_path_query('[[0,1], [0,1,2]]'::jsonb, '$ ? (@.size() >= 3)');

结果

 jsonb_path_query 
------------------
 [0, 1, 2]
(1 row)

推荐阅读