postgresql - Postgres jsonb_path_query 按长度过滤子数组
问题描述
在 Postgres 13.3 中,我想从一个jsonb
值中提取特定长度的子数组:
select jsonb_path_query('[[0,1], [0,1,2]]'::jsonb, '$[*] ? (@.size() >= 3)');
但是,这不会返回任何内容(0 行)。
我究竟做错了什么?请注意,我想继续使用jsonpath
- 虽然此示例已简化,但实际案例涉及更多,并且依赖于 jsonpath 表达式的灵活性。
解决方案
将同时$[*]
执行数组数组中的每个元素,因此分别计算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)
推荐阅读
- angular - Angular 5 - 动态基础引用导致重复加载包|块
- javascript - 在 JavaScript 中使用 AJAX 调用 OpenWeather API
- angular - 如何在 Angular 6 中导入节点 npm 模块
- android - 将flutter更新到flutter 1.0.0后,运行项目时gradle出现错误
- android - 带有自定义可绘制对象的 RatingBar 工作异常
- r - 如何将多个插补数据转换为 r 中的中间值?
- json - 通过 VUE.js 中的 ajax 调用读取 JSON
- android - 从 HttpURLConnection 获取 SSL 证书
- javascript - Intl NuberFormat 泰国货币错误
- postgresql - How to get sum of salary column from table GORM