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

PostgreSQL如何删除jsonb数组所有元素中的指定字段

实现方案

你可以通过拆分数组→逐元素删除字段→重新聚合数组的逻辑实现批量删除,兼容PostgreSQL 9.4及以上所有版本:

UPDATE items
SET data = (
    SELECT jsonb_agg(elem - 'count')
    FROM jsonb_array_elements(data) AS elem
)
-- 可选过滤条件,避免无意义更新
WHERE jsonb_typeof(data) = 'array' -- 只处理数组类型的data值
  AND data @> '[{"count": 1}]'::jsonb; -- 只处理数组中确实存在count字段的行

原理解释

  • jsonb_array_elements(data):将data字段的jsonb数组拆分为多行,每行对应数组中的一个对象元素
  • elem - 'count':jsonb对象的减号操作符,直接删除当前对象的count键值对,若元素本身没有count字段也不会报错,会原样返回
  • jsonb_agg(...):将处理后的所有对象元素重新聚合为jsonb数组,回写至data字段

可选优化(PostgreSQL 12+版本)

如果你使用PostgreSQL 12及以上版本,可以通过JSON路径表达式实现更简洁的写法:

UPDATE items
SET data = jsonb_path_query_array(data, '$[*] - "count"')
WHERE jsonb_typeof(data) = 'array';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:57:02