在PostgreSQL的JSONB列中搜索数组的内部数组

问题描述

我的Postgre@R_502_6308@数据库中有一个JSONB列。数据如下:

{
   "cars": 
      [ 
        {
          "id": 1,"brand": "BMW"
          "parts": 
            [
              {
                "partId": 5,"type": "battery"
              }
            ]
        },{
          "id": 2,"brand": "Mercedes"
          "parts": 
            [
              {
                "partId": 5,"type": "battery"
              },{
                "partId": 6,"type": "engine"
              }
            ]
        }
     ]
}

有什么办法可以搜索所有零件类型为“电池”的汽车?如何在汽车数组内部搜索,然后在每个汽车元素的部件数组内部搜索

解决方法

由于您的问题尚不清楚,您想要什么输出。因此,我假设您要在输出中使用idbrand的名称:

所以您尝试一下:

select distinct x.y->>'id',x.y->>'brand' 
from test 
cross join lateral jsonb_array_elements(data->'cars') x(y)
cross join lateral jsonb_array_elements(x.y->'parts') a(b)
where a.b->>'type'='battery'

DEMO