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

PostgreSQL:如何从JSONB数组中移除键a值为x的对象?

PostgreSQL移除JSONB数组中指定对象的方法

要移除test表data字段JSONB数组中所有包含键"a"且值为"x"的对象,这里提供两种实用的实现方式:

方法一:展开数组过滤后聚合

通过拆分数组元素、筛选保留项、重新聚合的方式实现:

UPDATE test
SET data = (
  SELECT jsonb_agg(elem)
  FROM jsonb_array_elements(data) elem
  WHERE elem @> '{"a": "x"}' IS NOT TRUE
)
WHERE id = 1; -- 如需更新全表可删除此WHERE条件
  • jsonb_array_elements(data):将JSONB数组拆分为单个元素
  • elem @> '{"a": "x"}':判断元素是否包含目标键值对,取反后保留不需要移除的元素
  • jsonb_agg(elem):将筛选后的元素重新聚合成JSONB数组

方法二:使用JSON路径直接筛选

利用PostgreSQL的JSON路径功能,更简洁地完成筛选:

UPDATE test
SET data = jsonb_path_query_array(data, '$[*] ? (@.a != "x" || !exists(@.a))')
WHERE id = 1;
  • $[*]:遍历数组中的所有元素
  • ? (@.a != "x" || !exists(@.a)):筛选出两种元素:要么a的值不是x,要么元素本身不存在a键
  • jsonb_path_query_array:直接返回符合条件的元素组成的新数组

验证结果

执行更新后,查询验证:

SELECT data FROM test WHERE id = 1;

返回结果应为:[{"c": "y", "b": "b"}]

内容的提问来源于stack exchange,提问作者D. O.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:15:45