Postgres - 从 jsonb 数组中删除元素
Postgres - remove element from jsonb array
我有一个包含 jsonb
个元素 (jsonb[]
) 的数组,其中包含 ID 和文本。要删除一个元素,我可以使用:
UPDATE "Users" SET chats = array_remove(chats, '{"id": 2, "text": "my message"')
但是我只想通过id删除消息,因为获取消息需要我再次查询。
假设缺少信息:
- 您的 table 有一个名为
user_id
的 PK。
- 您想要删除整个 table 中带有
id = 2
的所有元素。
- 您不想触摸其他行。
id
在 chats
. 的每个数组中是唯一的
UPDATE "Users" u
SET chats = array_remove(u.chats, d.chat)
FROM (
SELECT user_id, chat
FROM "Users", unnest(chats) chat
WHERE chat->>'id' = '2'
) d
WHERE d.user_id = u.user_id;
以下解释符合问题中提供信息的范围:
我有一个包含 jsonb
个元素 (jsonb[]
) 的数组,其中包含 ID 和文本。要删除一个元素,我可以使用:
UPDATE "Users" SET chats = array_remove(chats, '{"id": 2, "text": "my message"')
但是我只想通过id删除消息,因为获取消息需要我再次查询。
假设缺少信息:
- 您的 table 有一个名为
user_id
的 PK。 - 您想要删除整个 table 中带有
id = 2
的所有元素。 - 您不想触摸其他行。
id
在chats
. 的每个数组中是唯一的
UPDATE "Users" u
SET chats = array_remove(u.chats, d.chat)
FROM (
SELECT user_id, chat
FROM "Users", unnest(chats) chat
WHERE chat->>'id' = '2'
) d
WHERE d.user_id = u.user_id;
以下解释符合问题中提供信息的范围: