Как запросить этот JSONB?

#java #database #postgresql #spring-boot #jpa

Вопрос:

Так что у меня есть столик

 Node_Mapping(location_id:UUID, node_ids: jsonb)  

Соответствующим POJO для этого является

 class NodeMapping{  UUID locationId;  Setlt;Stringgt; nodeIds; }  

Примером данных в таблице является

 UUID1 : ['uuid100', 'uuid101'] UUID2 : ['uuid103', 'uuid101']  

Поэтому я хочу сделать запрос, например, узнать все locationIds , что содержит это Listlt;Stringgt; : ['uuid100', 'uuid200', 'uuid300']

Пожалуйста, помогите мне сформировать запрос «В» с помощью JSONB.

Также, пожалуйста, помогите мне создать функцию/SP для ввода этого списка строк и возврата списка идентификаторов местоположения в виде списка/набора..

Я попробовал эту функцию, но она не работает.

 CREATE OR REPLACE FUNCTION find_location_ids_for_seller(_seller_id text[])  RETURNS TABLE(location_id text)  LANGUAGE plpgsql AS  $func$  BEGIN  RETURN QUERY  SELECT n.location_id::text  FROM node_mapping n  WHERE n.node_ids IN _seller_id;  END  $func$;  

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

1. Не могли бы вы уточнить критерии выбора идентификаторов местоположения : это список идентификаторов местоположения, идентификатор узла которого (a) точно соответствует списку [‘uuid100’, ‘uuid200’, ‘uuid300’] :: jsonb (b) содержит список [‘uuid100’, ‘uuid200’, ‘uuid300’] :: jsonb (c) содержит один или несколько элементов списка [‘uuid100’, ‘uuid200’, ‘uuid300’] :: jsonb (d) …

2. В принципе, [‘uuid100’, ‘uuid200’, ‘uuid300’] это список идентификаторов узлов, содержимое этого списка может принадлежать различным идентификаторам location_id. например, location1UUID — [‘uuid100’], location2UUID-[‘uuid200’, ‘uuid300’] .. Теперь моя цель состоит в том, чтобы я получил список рандомизированных идентификаторов узлов, как указано в примере выше, мой вывод должен быть [‘Location1UUID’, ‘Location2UUID’]

3. И ответом на ваш вопрос будет (с).

Ответ №1:

Запрос для получения идентификаторов узлов, содержащих один или несколько элементов списка _seller_id :: text [], является :

 CREATE OR REPLACE FUNCTION find_location_ids_for_seller(_seller_id text[])  RETURNS TABLE(location_id text)  LANGUAGE sql AS  $func$  SELECT n.location_id::text  FROM node_mapping n  WHERE n.node_ids :: jsonb ?| _seller_id ;  $func$;