【问题标题】:Postgres jsonb_path_query to filter sub-arrays by their lengthPostgres jsonb_path_query 按长度过滤子数组
【发布时间】:2021-07-01 12:01:46
【问题描述】:

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

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

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

我做错了什么? 请注意,我想继续使用jsonpath - 虽然此示例已简化,但实际情况要复杂得多,并且依赖于 jsonpath 表达式的灵活性。

【问题讨论】:

    标签: postgresql json-path-expression


    【解决方案1】:

    $[*] 将同时执行数组数组中的每个元素,因此分别计算 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)
    

    【讨论】:

    • 我刚刚发现的另一种方法是使用strict模式,这样子数组就不会自动展开:strict $[*] ? (...)
    猜你喜欢
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 2020-02-04
    • 2016-10-13
    • 1970-01-01
    相关资源
    最近更新 更多