如何直接用某個key的值更新pg的json數組數據?

有些東西看起來很簡單,但卻很難使用。在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函數支持條件?

你_能_給_我_一些_直接_解決_這個_問題_的_簡單_方法_嗎_ ?_

? 最佳回答:

您可以卸載、修改和重新聚集:

select json_agg(
    case when obj ->> 'id' = '5' 
        then obj - 'name' || '{"name": "Tom"}'::jsonb
        else obj
    end
    order by rn
) as newjson
from jsonb_array_elements(myjson) with ordinality x(obj, rn)
主站蜘蛛池模板: 亚洲日韩精品一区二区三区 | 老鸭窝毛片一区二区三区| 国产日韩精品视频一区二区三区 | 精品理论片一区二区三区| 一区二区三区四区视频| 精品亚洲福利一区二区| 99精品一区二区三区无码吞精| 亚洲毛片不卡av在线播放一区| 大帝AV在线一区二区三区| 日韩精品一区二区三区老鸭窝| 激情内射亚州一区二区三区爱妻| 福利一区二区在线| 国产亚洲综合精品一区二区三区| 国产欧美一区二区精品仙草咪 | 色综合久久一区二区三区| 亚洲一区二区三区亚瑟| 99精品一区二区三区| 久久青草国产精品一区| 成人影片一区免费观看| 色婷婷AV一区二区三区浪潮| 一区二区三区亚洲视频| 国产激情一区二区三区 | 一区二区三区免费视频观看| 四虎一区二区成人免费影院网址| 无码人妻aⅴ一区二区三区| 国产福利日本一区二区三区| 日韩精品国产一区| 日韩有码一区二区| 中文字幕在线无码一区二区三区| 国产成人无码一区二区在线观看| 国产一区二区在线看| 日韩人妻精品无码一区二区三区| 日韩精品区一区二区三VR| 亚洲电影唐人社一区二区| 日本在线视频一区二区| 国模大胆一区二区三区| 午夜精品一区二区三区在线观看| 久久无码精品一区二区三区| 日韩一区二区久久久久久| 亚洲国产一区在线观看| 国产精品日韩一区二区三区|