Sql 如何从JSONB数组中删除特定属性
我有一个PostgresJSONB列,其中包含如下数组:我想运行一个查询,从这些对象中删除“hide”属性Sql 如何从JSONB数组中删除特定属性,sql,postgresql,jsonb,Sql,Postgresql,Jsonb,我有一个PostgresJSONB列,其中包含如下数组:我想运行一个查询,从这些对象中删除“hide”属性 [ { "data": "id", "width": 25 }, { "data": "field_1", "width": 125 }, { &quo
[
{
"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
}
]
运行后的预期输出为:
[
{
"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()
函数和减法运算符,以便在减去hide
属性时导出数组中的每个元素,然后再次聚合数组中的单独元素,例如
SELECT JSONB_PRETTY( JSONB_AGG(jsdata) ) AS result
FROM ( SELECT JSONB_ARRAY_ELEMENTS( columnsettings ) - 'hide' AS jsdata
FROM mytable ) AS t
Update语句中的或
UPDATE mytable
SET columnsettings = ( SELECT JSONB_AGG(jsdata)
FROM ( SELECT JSONB_ARRAY_ELEMENTS( columnsettings )
- 'hide' AS jsdata
FROM mytable ) AS t )