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

PostgreSQL如何按指定ID/值删除JSONB数组(JSONB[])中的元素

你期望的直接用-运算符按JSON内部字段匹配删除的写法暂不支持。PostgreSQL内置的-运算符针对JSONB/JSONB[]类型仅支持两类操作:一是按索引删除数组元素,二是删除和目标值完全匹配的数组元素。你需要匹配的是JSON对象内的notification_id字段,其余字段如timestamp、content的值不固定的情况下无法实现完全匹配,因此不能直接用-运算符满足需求。

以下是对应场景的可用实现方案:

场景1:字段类型为JSONB(存储内容本身是数组结构)

如果你的notifications字段定义为JSONB类型,只是存储的内容是数组结构,可直接使用PostgreSQL 12及以上版本支持的JSONPath语法过滤:

UPDATE users 
SET notifications = jsonb_path_query_array(
    notifications,
    '$[*] ? (@.notification_id != "c20da296")'
)
WHERE user_id = '<user_uuid4>';

场景2:字段类型为JSONB[](PostgreSQL原生数组,元素为JSONB)

如果确实是你提到的JSONB数组类型,可通过遍历数组过滤后重新构造数组实现:

UPDATE users
SET notifications = ARRAY(
    SELECT elem 
    FROM unnest(notifications) elem
    WHERE elem->>'notification_id' != 'c20da296'
)
WHERE user_id = '<user_uuid4>';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:48:04