gpt4 book ai didi

postgresql - 从 jsonb 数组中删除元素

转载 作者:行者123 更新时间:2023-12-04 01:13:00 27 4
gpt4 key购买 nike

我有以下jsonb。我想从数组页面中删除名为“pageb”的元素。类似问题中提供的解决方案对我不起作用。

'{
"data": {
"id": "a1aldjfg3f",
"pages": [
{
"type": "pagea"
},
{
"type": "pageb"
}
],
"activity": "test"
}
}'

我的脚本现在看起来像这样。它不会返回任何错误,但不会删除元素。
  UPDATE database
SET reports = jsonb_set(reports, '{data,pages}', (reports->'data'->'pages') - ('{"type":"pageb"}'), true)
WHERE reports->'data'->'pages' @> '[{"type":"pageb"}]';

最佳答案

-此处无法应用运算符,因为右侧操作数是定义键的字符串,per the documentation:

Delete key/value pair or string element from left operand. Key/value pairs are matched based on their key value.



从 json 数组中删除 json 对象可以通过解包数组并找到对象的索引来完成。使用此方法的查询可能过于复杂,因此在这种情况下定义自定义函数非常方便。
create or replace function jsonb_remove_array_element(arr jsonb, element jsonb)
returns jsonb language sql immutable as $$
select arr- (
select ordinality- 1
from jsonb_array_elements(arr) with ordinality
where value = element)::int
$$;

和更新:
update my_table
set reports =
jsonb_set(
reports,
'{data,pages}',
jsonb_remove_array_element(reports->'data'->'pages', '{"type":"pageb"}')
)
where reports->'data'->'pages' @> '[{"type":"pageb"}]';

Working example in rextester.

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com