Как операция над Json объектом в postgresql - PullRequest
0 голосов
/ 24 марта 2020

В моей таблице есть столбец JSON, в котором есть массив словарей. Массив имеет стандартный формат.

[{'path': 'chat/xyz.pdf', 'file_name': 'xyz.pdf'},
 {'path': 'chat/xyl.pdf', 'file_name': 'xyl.pdf'}]

Имя таблицы chat и имя столбца attachments . Я хочу выполнить поиск по именам файлов, так что даже если я наберу одну букву, то эта строка должна быть восстановлена. Например: если я выполняю поиск по строке 'pd', то должны быть получены все значения с именем file_name, имеющим строку 'pd'.

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Вы можете использовать условие EXISTS, тогда вам не нужно DISTINCT:

select c.*
from chat c
where exists (select *
              from jsonb_array_elements(c.attachments) as t(doc)
              where t.doc ->> 'file_name' like '%xyz%');
0 голосов
/ 24 марта 2020

Я попробовал это, и это сработало.

select distinct attachments from chat, jsonb_array_elements_text(attachments)
where value::json->>'file_name' like '%xyz%';

Я взял ссылку из документации.

...