我有一个包含2列“节点”和“时间戳”的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
的所需对象。
如何实现查询?
答案 0 :(得分:1)
在横向联接中使用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)