[英]How can I remove a specific element from a jsonb array of primitive strings in postgres
[英]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.