Postgresql 如何删除jsonb中具有特定值的对象
我有一个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
[
{
"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;