You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中删除嵌套JSON数组内的指定键值对

方案说明

PostgreSQL 针对JSON类型字段的嵌套数组元素删键操作,可以通过「拆分数组→逐元素处理→重新聚合→替换原字段」的逻辑实现,以下是不同场景的可用写法:

场景1:fields字段为jsonb类型(推荐PostgreSQL 9.5+使用)

仅查询验证处理结果
SELECT 
    jsonb_set(
        fields,
        '{b}',
        (SELECT jsonb_agg(elem - 'c') FROM jsonb_array_elements(fields->'b') elem)
    ) AS processed_fields
FROM mytable;
直接更新表内数据
UPDATE mytable
SET fields = jsonb_set(
    fields,
    '{b}',
    (SELECT jsonb_agg(elem - 'c') FROM jsonb_array_elements(fields->'b') elem)
)
-- 可自行添加WHERE条件限定更新范围,例如WHERE id = 10;
;

场景2:fields字段为json类型

原生json类型不支持-删键操作符,需要先转jsonb处理完成后再转回json类型:

-- 查询示例
SELECT 
    json_set(
        fields,
        '{b}',
        (SELECT json_agg((elem::jsonb - 'c')::json) FROM json_array_elements(fields->'b') elem)::json
    ) AS processed_fields
FROM mytable;

-- 更新示例
UPDATE mytable
SET fields = json_set(
    fields,
    '{b}',
    (SELECT json_agg((elem::jsonb - 'c')::json) FROM json_array_elements(fields->'b') elem)::json
);

扩展说明

如果需要同时删除多个键,可链式调用删键操作符,比如同时删除c和d可以写为elem - 'c' - 'd'。

内容的提问来源于stack exchange,提问作者Jason KIM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:09:01