带有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
解决方案: |
|
|
|
|
|