Поиск внутри массива массива в столбце JSONB в Postgresql

#postgresql #jsonb

#postgresql #jsonb

Вопрос:

У меня есть столбец JSONB в моей базе данных PostgreSQL. Данные выглядят следующим образом:

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

Есть ли какой-либо способ, которым я могу искать все автомобили, у которых есть деталь с типом «аккумулятор»? Как я могу выполнить поиск внутри массива cars, а затем внутри массива parts каждого элемента car?

Комментарии:

1. Какой результат вы ожидаете? Также обновите свою версию базы данных Postgresql

Ответ №1:

Поскольку в вашем вопросе неясно, какой вывод вы хотите. Итак, я предполагаю, что вы хотите id и brand имя в выходных данных:

итак, вы пытаетесь это:

 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'

  

ДЕМОНСТРАЦИЯ

Комментарии:

1. Я только что протестировал ваше решение, и оно работает нормально. Поздравляю!