回答

收藏

带有jsonb_set()的UPDATE仅影响嵌套数组中的一个对象

技术问答 技术问答 216 人阅读 | 0 人回复 | 2023-09-12

尝试更新jsonb列中嵌套数组的所有元素,但只更新了一个元素。我的查询:
3 J* C' {3 Q7 i) ~; v6 `' O4 x8 Kupdate table_  set value_ = jsonb_set(value_,cte.json_path,cte.namevalue,false) FROM (select  vals2->'ao'->'sc'->'name' as namevalue, ('{iProps,'||index1-1||',value,rules,'||index2-1||',ao,sc}')::text[] as json_pathfrom   table_,  jsonb_array_elements(value_->'iProps')   with ordinality arr1(vals1,index1), jsonb_array_elements(vals1->'value'->'rules')   with ordinality arr2(vals2,index2)  ) AS cte;查看带样本值的演示:
0 E2 {! Z" F3 Q* gdb  G, ^2 j5 }  M) T4 p- c* @
在这里拨弄
4 X! F. E9 i% v# \! {9 l. @2 [: q3 k0 `不明白为什么这个查询更新rules数组中的第一个对象:! e$ y7 P* u5 Y& O+ [8 Y+ ?$ C
iProps -> value -> rules -> ao -> sc -> name = "name1"但不是:
( i% s/ }; `  Y- l) V+ a( KiProps -> value -> rules -> ao -> sc -> name = "name2"iProps -> value -> rules -> ao -> sc -> name = "name3"                " O1 o' @2 A; y
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则