arrays - Postgres - 从 jsonb 数组中删除元素

标签 arrays postgresql sql-update jsonb

我有一组 jsonb 元素 (jsonb[]),带有 id 和文本。要删除我可以使用的元素:

UPDATE "Users"SET chats = array_remove(chats, '{"id": 2, "text": "my message"')

但我只想通过 id 删除消息,因为获取消息将花费我另一个查询。

最佳答案

假设缺少信息:

  • 您的表有一个名为 user_id 的 PK。
  • 您想删除整个表中所有 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;

以下解释符合问题中提供信息的范围:

关于arrays - Postgres - 从 jsonb 数组中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30005584/

相关文章:

ruby-on-rails - Rails 在 list 模型中重新排列订单

更新后mysql触发

sql - 更新 LEFT JOIN 错误

mysql - 更新 MySQL 数据库上两个不同表的值

ruby - 无法将 2 个数组组合成一个散列 - ruby

javascript - 在二维数组中查找精确值

c# - 将字节数组初始化为某个值,而不是默认的 null?

postgresql 四舍五入函数

objective-c - Objective C - 数字数组

PostgreSQL - 将数组值视为查询中的记录