簡體   English   中英

如何從 JSONB 數組中刪除特定屬性

[英]How to remove specific attribute from JSONB array

我有一個包含如下數組的 postgres JSONB 列:我想運行一個查詢,從這些對象中刪除“隱藏”屬性。

[
    {
        "data": "id",
        "width": 25
    },
    {
        "data": "field_1",
        "width": 125
    },
    {
        "data": "field_3",
        "hide": true,
        "width": 170
    },
    {
        "data": "addedby",
        "width": 178
    },
    {
        "data": "field_67",
        "width": 125,
        "hide": true
    }
]

運行后所需的 output 將是:

[
    {
        "data": "id",
        "width": 25
    },
    {
        "data": "field_1",
        "width": 125
    },
    {
        "data": "field_3",
        "width": 170
    },
    {
        "data": "addedby",
        "width": 178
    },
    {
        "data": "field_67",
        "width": 125
    }
]

我知道從 JSONB 屬性中刪除單個屬性如下所示:

update mytable set columnsettings = columnsettings -hide where tableid=55

但是我如何指定從整個數組中刪除這個屬性呢? 僅供參考,我正在運行 postgres 11

只需使用JSONB_ARRAY_ELEMENTS() function 和減法運算符,以便在減去hide屬性的同時導出數組中的每個元素,然后再次聚合數組中的單獨元素,例如

SELECT JSONB_PRETTY( JSONB_AGG(jsdata) ) AS result
  FROM ( SELECT JSONB_ARRAY_ELEMENTS( columnsettings ) - 'hide' AS jsdata
           FROM mytable ) AS t

更新語句

UPDATE mytable
   SET columnsettings = ( SELECT JSONB_AGG(jsdata)
                           FROM ( SELECT JSONB_ARRAY_ELEMENTS( columnsettings ) 
                                      - 'hide' AS jsdata
                                    FROM mytable ) AS t )

演示

暫無
暫無

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

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