首页 > 解决方案 > 从存储在 postgresql 列中的数组中删除 json 对象

问题描述

我有一个 json 对象数组,我想从中删除三个特定对象。例如:

[{"id": "aaa"}, {"id": "aab"}, {"id": "aac"}, {"id": "aad"}]

我需要更新表并从数组中删除包含"aaa","aab"和的对象,"aac"以便数组只包含

[{"id": "aad"}]

或任何其他存储在数组中且不包含前面提到的存储在“id”中的值的 json 对象。

我正在使用 Postgres,我只知道我需要使用 UPDATE,但仅此而已(我仍然是初学者)。

标签: sqlarraysjsonpostgresql

解决方案


您需要取消嵌套数组,过滤掉不需要的元素,然后聚合回来:

update the_table
   set the_column = (select jsonb_agg(j)
                     from jsonb_array_elements(the_table.the_column) as t(j)
                     where j ->> 'id' not in ('aaa','aab','aac'));

在线示例:https ://rextester.com/HCJK50138


推荐阅读