在 Postgres jsonb 列中查询数组对象

Querying for an array object in Postgres jsonb column

我有一个 Postgres table 有 2 列 "nodes" & "timestamp"。"nodes" 列的类型是 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.

的所需对象

如何实现查询?

在横向连接中使用 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)