Запросы для объекта массива в столбце Postgres jsonb - PullRequest
0 голосов
/ 08 января 2019

У меня есть таблица Postgres с двумя столбцами «узлы» и «отметка времени». Столбец «узлы» имеет тип jsonb и представляет собой массив объектов следующего формата:

[
    {
        "addr": {},
        "node_number": "1",
        "primary": false
    },
    {
        "addr": {},
        "node_number": "2",
        "primary": true
    },
]

Я хочу найти объект в этом массиве, который имеет "primary":true в самой последней строке. Если выше был последний ряд, результат должен быть:

{
    "addr": { },
    "node_number": "2",
    "primary": true
}

Я пробовал:

SELECT(nodes -> 0) FROM table WHERE nodes @> '[{"primary": true}]'
order by timestamp desc
limit 1;

, который дает объект с индексом 0 в массиве, а не нужный объект, имеющий "primary": true.

Как я могу реализовать запрос?

1 Ответ

0 голосов
/ 08 января 2019

Используйте jsonb_array_elements() в боковом соединении:

select elem
from my_table 
cross join jsonb_array_elements(nodes) as elem
where (elem->>'primary')::boolean

                       elem                        
---------------------------------------------------
 {"addr": {}, "primary": true, "node_number": "2"}
(1 row) 
...