0

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)

关于如何做到这一点的任何建议?谢谢!

4

1 回答 1

2

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

  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”键更改了输入,又添加了两个元素

于 2018-08-22T14:09:48.353 回答