gpt4 book ai didi

postgresql - 如何根据属性值(而不是索引)更新匹配条件的 JSON 节点?

转载 作者:行者123 更新时间:2023-11-29 14:30:57 24 4
gpt4 key购买 nike

PostgreSQL 10+

文档中的示例...

jsonb_set('[{"f1":1,"f2":null},2,null,3]', '{0,f1}','[2,3,4]', false)

结果...

[{"f1":[2,3,4],"f2":null},2,null,3]

很公平。但是我需要通过属性值而不是索引来找到我的目标节点。对于我的生活,我无法弄清楚如何做...

jsonb_set('[{"f1":1,"f2":null},2,null,3]', '{(where f1 = 1),f1}','[2,3,4]', false)

关于如何实现这一点有什么建议吗?谢谢!

最佳答案

您可以将这些步骤分成两个工作:

  1. 拆分元素 (jsonb_arral_elements)
  2. 确定哪些元素必须改变(情况...)
  3. 更新该元素 (jsonb_set)
  4. 一起加入 (jsonb_agg)

解决方案

select jsonb_agg(case when element->>'f1'='1' then jsonb_set(element, '{f1}', '[2,3,4]') else element end)
from jsonb_array_elements('[{"f1":1,"f2":null},2,null,3,{"f1":3},{"f1":1,"f2":2}]'::jsonb) element

注意

我更改了输入,使用“f1”键添加了两个元素

关于postgresql - 如何根据属性值(而不是索引)更新匹配条件的 JSON 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51968311/

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