有些東西看起來很簡單,但卻很難使用。在pg函數中,我經常使用json數據來存儲數組數據。
請看下面我的json數據:
[
{
"id":5,
"name":"John",
"sex":"male"
},
{
"id":4,
"name":"Alice",
"sex":"female"
},
{
"id":6,
"name":"Jack",
"sex":"male"
}
]
例如,我想修改數組的子對象的某個值,也就是說,我只想把“name”修改為“Tom”,其中id為5,如何直接求解?
如果我使用jsonb_set函數,你知道jsonb_set函數不支持條件,我應該首先知道數組子對象的索引,就像
jsonb_set(myjsonb,'{0,name}','Tome')
但是我首先不知道索引,我只知道元素對象的某個鍵的值。
對于cource,我可以首先將子對象放入一個表中,該表看起來非常復雜,如下所示:
select
fserial-1 into myindex
from jsonb_array_elements(myjson) with ordinality vids(frow ,fserial)
where cast(frow->>'id' as bigint)=5;
我想也許我可以使用jsonb_set和jsonpath一起直接解決它,但是我查看了pg的文檔,找不到正確的方法。
PG為json數組提供了這么多的路徑操作符和方法,include.size()和soso,為什么不提供一個.index()方法呢?為什么jsonb_set函數支持條件?
你_能_給_我_一些_直接_解決_這個_問題_的_簡單_方法_嗎_ ?_
您可以卸載、修改和重新聚集: