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
相关产品推荐
相关产品推荐

