Задать вопрос
@viz_ko

PostgreSQL, как осуществить поиск по вложенному json?

Всем доброго времени суток.
Никак не могу найти ответ на просторах интернета.

Есть json объект, который храниться в колонке. Одна строка - один объект. На каждой строке разные данные.

[
{
"name": "test",
"email": "test@test.com"
},
{
"name": "test",
"email": "test@test.com"
},
{
"name": "test",
"email": "test@test.com"
}
]

По сути это массив, каждый из элементов которого - ассоциативный массив. Количество элементов - произвольное

Суть вопроса: Как я могу в запросе отфильтровать строки по именам? Например, мне нужно получить все строки, где хотя бы одно из name содержит, например, "st" (name like '%st%'). Стандартным доступом -> добраться я не могу, т.к. он перебирает верхний уровень. Плюс в верхнем уровне у меня нумерованный массив (не ассоциативный).
  • Вопрос задан
  • 48 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Melkij
@Melkij
DBA для вашего PostgreSQL?
через jsonpath
jsonb_field @@ '$[*].name like_regex "st"'

или более традиционным способом
where exists(select from  jsonb_array_elements(jsonb_field) j where j->>'name' like '%st%')
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ky0
@ky0
Миллиардер, филантроп, патологический лгун
На церковнославянском это называется "список словарей". Соответственно, искать нужно по индексу списка (ну или итерировать по ним), и далее по названию ключа в словаре.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы