簡體   English   中英

從 postgres 的數組中刪除嵌套的 json object

[英]Remove nested json object from array in postgres

我在 postgres 中有一個 json object 字段,具有以下形狀

{
"a": {
   
},
"b": [
    {
        
    }
],
"c": {
    "d": "",
    "e": [
        {
            "id": 1234,
            "f": "",
            "g": ""
        }
    ]
}

}

我想知道如何編寫一個語句,從 postgres 中 id 為 1234 的 e 數組中刪除對象。 e 可以有多個對象,如果 e 數組中有多個對象,我想保留這些對象,並且只刪除 id 為 1234 的 object。

謝謝

分步演示:db<>fiddle

UPDATE t 
SET data = jsonb_set(data::jsonb, '{c,e}', s.new_array::jsonb)::json   -- 4
FROM (
    SELECT
        json_agg(value) as new_array                   -- 3
    FROM
        t,
        json_array_elements(data -> 'c' -> 'e')        -- 1
    WHERE value ->> 'id' != '1234'                     -- 2
) s;
  1. 要從 JSON 數組中刪除某個元素,您需要將其擴展為每個數組元素的一行
  2. 刪除包含要刪除的元素的記錄
  3. 重新聚合 JSON 陣列
  4. 如果你想對你的表進行UPDATE ,你可以使用jsonb_set() function 用你新創建的數組更新 JSON 元素。 除非您不使用類型jsonb ,否則您必須將您的 JSON 數據轉換為jsonb (並將結果返回類型json

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM