首页 > 解决方案 > 在 Postgres 中查询 JSONB 中的复杂数组

问题描述

我有一个 JSONB 字段值:

{
   "status":200,
   "response":{
      "page":1,
      "limit":10,
      "total":4,
      "orders":[
         {
            "id":40201
         },
         {
            "id":40111
         }
      ]
   }
}

如何查询 id=40201 的订单数组对象?

我试图用 response->orders->[id: 40201] 查询所有行

标签: sqlpostgresqljsonb

解决方案


演示:db<>小提琴

如果您知道这是数组中的第一个对象(从零开始!):

SELECT
    yourjson -> 'response' -> 'orders' -> 0

如果没有,您必须将数组扩展为每个元素一行,jsonb_array_elements()并过滤每一行:

SELECT 
    elems.value
FROM 
    yourtable,
    jsonb_array_elements(yourjson -> 'response' -> 'orders') elems
WHERE
    elems ->> 'id' = '40201'

文件


推荐阅读