1

我有一个包含 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.

如何实现查询?

4

1 回答 1

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) 
于 2019-01-07T21:33:45.030 回答