在 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)
我有一个 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)