【问题标题】:How to Fetch first 10 elements from JSONB Column in postgres如何从 postgres 中的 JSONB 列中获取前 10 个元素
【发布时间】:2020-11-26 22:17:42
【问题描述】:

我的要求是从 jsonb 列中获取前 n 个元素并显示在 UI 中,我正在使用 Java 和 Angular,作为第一步,我试图找出是否可以在 DB 上找到一些东西,这样我就不会需要在java中编写任何json解析逻辑,所以我的问题是从postgres的JSONB列中检索前n个元素,有限制

我的数据库中有这样的 Json 值:

{"firstName": "Hello", "lastName": "Hi", "address" : [{"addressLine1": "line1", "street1": "street"},
                                                       {"addresLine2":  "line2","street2": "street2"}                  ]} 

现在我想获取前 n 个元素,这里的元素是:firstName、LastName、AddressLine1、street1、addressLine2、street2 等。限制为 1-10、11-20 元素等。我搜索了 postgres 函数像 jsonb_each... 并且找不到任何提供限制的东西,有没有办法我们可以做到这一点?

这是我尝试过的查询:

select jsonb_each(jsonbcolumn) from my_table 

将json的所有元素放入键值对

【问题讨论】:

    标签: java arrays json postgresql unnest


    【解决方案1】:

    您可以在横向连接中使用jsonb_array_elements() 取消嵌套数组。选项with ordinality可用于对数组元素进行排序并限制结果数量:

    select t.*, x.*
    from mytable t
    cross join lateral (
        select *
        from jsonb_array_elements(t.jsonbcolumn -> 'address') with ordinality as x(obj, rn)
        order by x.rn
        limit 10
    ) x
    

    【讨论】:

    • 这里的 rn 是什么,我执行了相同的查询,但无法从对象中提取元素
    • @user2108383: rn序数,即数组内元素的索引。我修复了您遇到的错误的查询。
    • 好的,感谢您的编辑,但我得到的只是地址条目,而不是名字和姓氏
    猜你喜欢
    • 1970-01-01
    • 2019-01-23
    • 2020-09-16
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 2015-07-12
    • 2021-01-08
    相关资源
    最近更新 更多