Как запросить объекты во вложенном json в postgres - PullRequest
1 голос
/ 04 апреля 2019

Допустим, у меня есть таблица с именем users с jsonb столбцом с именем attrs с такими значениями:

{
  "uuid5": {
    "label": "Email",
    "value": "example@test.com.tw"
  },
  "uuid6": {
    "label": "Last Name ",
    "value": "Yang"
  }
}

Вот одна строка:

"attrs": { "uuid5": { "label": "Email", "value": "example@test.com.tw" }, "uuid6": { "label": "Last Name ", "value": "Yang" }

Как видите, есть уникальные ключи uuid5, uuid6 и т. Д.

Как получить пользователей с меткой = 'Email' и значением ='example@test.com.tw'?

В postgres docs о функциях json есть функция с именем jsonb_each, которая возвращает набор пар ключ / значение объекта JSON. Но я не смог найти способ написать запрос, основанный на этом.

1 Ответ

2 голосов
/ 04 апреля 2019

Вам нужно jsonb_each, чтобы перебрать все записи в столбце attrs. Он вернет пары ключ / значение, где ключом является uuid, а запись - это ваша фактическая структура JSON, которую вы хотите проверить. Вы можете использовать это вместе с условием EXISTS:

select u.*
from users u
where exists (select *
              from jsonb_each(u.attrs) as t(uid,entry)
              where t.entry ->> 'label' = 'Email'
                and t.entry ->> 'value' = 'example@test.com.tw')

Онлайн пример: https://rextester.com/SHN95362

...