Postgresql 如何删除jsonb中具有特定值的对象

Postgresql 如何删除jsonb中具有特定值的对象,postgresql,jsonb,Postgresql,Jsonb,我有一个jsonb类型,其中包含以下示例数据: [ { "name": "test1_name", "lastname": "test1_lastname" }, { "name": "test2_name", "lastname": "test2_lastname", "order": 14 } ] 现在我试图找到一种方法来删除数组中order字段不为NULL的所有文档。我真的不知道该怎么做。所以基本上我想说: "delete all

我有一个jsonb类型,其中包含以下示例数据:

[
  {
    "name": "test1_name",
    "lastname": "test1_lastname"
  },
  {
    "name": "test2_name",
    "lastname": "test2_lastname",
    "order": 14
  }
]
现在我试图找到一种方法来删除数组中order字段不为NULL的所有文档。我真的不知道该怎么做。所以基本上我想说:

"delete all objects inside the arrays
where order-value is not null"
我真的不知道如何从这个开始;因为我不知道文档的数组索引,所以我最终要删除它。有什么建议吗

将数组扩展为每个元素一条记录使用WITH ORDINALITY子句获取索引以存储正确的顺序 过滤相关数据 使用索引重新聚合其余元素。
如果我正确理解了您的问题,那么再假设您有一个表,它不仅是jsonb数组的一列,而且是一个类似这样的表,称为my_表

|id主键|用户列表jsonb数组|

使用with语句-可以执行以下操作:

WITH user_update AS (
SELECT
    id, users - (index::integer - 1) as new_list
FROM my_table,
    jsonb_array_elements(user_list) WITH ORDINALITY elems(data, index)
WHERE
    elems.data -> 'order' IS NOT NULL
)
UPDATE my_table SET user_list = user_update.new_list from user_update where my_table.id = user_update.id;
WITH user_update AS (
SELECT
    id, users - (index::integer - 1) as new_list
FROM my_table,
    jsonb_array_elements(user_list) WITH ORDINALITY elems(data, index)
WHERE
    elems.data -> 'order' IS NOT NULL
)
UPDATE my_table SET user_list = user_update.new_list from user_update where my_table.id = user_update.id;