Как получить первые 10 элементов из столбца JSONB в postgres - PullRequest
0 голосов
/ 06 августа 2020

Мое требование - получить первые n элементов из столбца jsonb и отобразить в пользовательском интерфейсе, я использую Java и angular, в качестве первого шага я пытаюсь найти, могу ли я что-то найти в БД, чтобы Мне не нужно писать какие-либо json логики синтаксического анализа c в java, поэтому мой вопрос состоит в том, чтобы получить первые n элементов из столбца JSONB из postgres с ограничением

У меня есть Json такое значение в моей БД:

{"firstName": "Hello", "lastName": "Hi", "address" : [{"addressLine1": "line1", "street1": "street"},
                                                       {"addresLine2":  "line2","street2": "street2"}                  ]} 

теперь я хочу получить первые n элементов, вот элементы: firstName, LastName, AddressLine1, street1, addressLine2, street2 et c .. с limit от 1-10, 11-20 элементов и т. д. c .. Я поискал в Google postgres функции, такие как jsonb_each ... и не смог найти ничего, что обеспечивает ограничение, есть ли способ сделать это?

Вот запрос, который я пробовал:

select jsonb_each(jsonbcolumn) from my_table 

, который дал все элементы json в пару значений ключа

1 Ответ

0 голосов
/ 06 августа 2020

Вы можете разъединить массив с помощью jsonb_array_elements() в боковом соединении. Опция with ordinality может использоваться для ранжирования элементов массива и ограничения количества результатов:

select t.*, x.*
from mytable t
cross join lateral (
    select *
    from jsonb_array_elements(t.jsonbcolumn -> 'address') with ordinality as x(obj, rn)
    order by x.rn
    limit 10
) x
...