Как запросить элементы вложенного json / dict - PullRequest
0 голосов
/ 06 мая 2020

Моя таблица - contacts_contact, а столбец называется полями.

Просто для контекста, первая часть json, которая меня интересует, представляет идентификатор потока и соответствующий ответ пользователя.

Примерно так: <Key, which is the flow id>:{"text", "false"}

Где text - это тип данных моего поля, а false означает, что пользователь не дал согласия. Они также могут выбрать true и согласие.

В псевдокоде я пытаюсь сделать следующее:

  1. Искать через contacts_contact
  2. Вернуть все строки, где ключ - 6784cbd4-505d-4ee4-8568-fb69913d6998 И ответ (значение) - ложь. (это означает, что 'text' равно 'false')

Другими словами, каждая строка, имеющая "6784cbd4-505d-4ee4-8568-fb69913d6998": {"text": "false"} в столбце полей, должна быть ВЫБРАНА.

Вот пример данных в столбец полей. Первая часть - это то, что меня интересует.

{
  "6784cbd4-505d-4ee4-8568-fb69913d6998": {"text": "false"},
  "70454b00-f408-4e69-8013-b010c3130fdd": {"text": "2020-05-04",
  "datetime": "2020-05-04T09:38:42.329388+02:00"},
  "9fc9e443-4bbb-4356-b9cc-71a6c15ded0e": {"text": "<1 month"},
  "abb3bb06-d4b7-4a58-8a3f-b100074b20a2": {"text": "<1 month"},
  "b55eb0e6-af0d-48c7-b2eb-f46529bdd07b": {"text": "True"},
  "b692354b-f314-406a-8ed8-47b7dde34379": {"text": "true"},
  "c7d75b60-f1d8-4588-affa-4ef148c75873": {"text": "WhatsApp"},
  "c80e14a9-e10f-41c8-ae59-c0ca14abf806": {"text": "true"},
  "cbfd64b8-739c-4913-b8c9-ba366043f1bd": {"text":
  "2020-04-20T00:00:00.000000+02:00", "datetime":
  "2020-04-20T00:00:00.000000+02:00"},
  "d5423a09-5486-4b80-bcae-4fc1e11b0dfa": {"text": "true"},
  "db36481d-3bb2-435d-b63d-bc9d5b5eadd3": {"text": "TRUE"},
  "e0f301ab-56eb-4bba-a6c1-d9668033172f": {"text": "Late Adopter"}
}

1 Ответ

1 голос
/ 06 мая 2020

Это можно сделать с помощью оператора contains @>

select *
from contacts_contact
where fields @> '{"6784cbd4-505d-4ee4-8568-fb69913d6998" : {"text": "false"}}';

Вышеупомянутое предполагает, что fields является столбцом jsonb (каким он должен быть). Если это не так, нужно разыграть его: fields::jsonb

...