在 jsonb 列下的 json 数组中添加新对象
Add new object to json array under jsonb column
我在 postgres table 中有 jsonb 数据类型列 "payload",其值如下:
{"testEvents": [
{
"id": 113068,
"name1": "test",
"count": 15
},
{
"id": 113069,
"name1": "test1",
"count": 15
}
]
}
现在我想通过向其添加一个 jsonobject 来更新内部 jsonarray。所以,我的结果会是
{"testEvents": [
{
"id": 113068,
"name1": "test",
"count": 15
},
{
"id": 113069,
"name1": "test1",
"count": 15
}
,
{
"id": 113070,
"name1": "test2",
"count": 18
}
]
}
我尝试了以下查询:
UPDATE table SET payload = payload ||'{"id":113070,"name1":"test2","count":18}';
但它正在替换以前的值。
由于我是这个主题的新手,任何人都可以帮助以正确的方式做到这一点。
jsonb_insert()
是你的函数
UPDATE mytable
SET jsondata =
jsonb_insert(jsondata, '{testEvents,0}', '{"id":113070, "name1":"test2","count":18}');
第二个参数定义必须插入新元素的路径。 0
是第一个位置。
您需要将新值附加到数组 ('testEvents'
) 而不是完整的 JSON 值。这可以使用 jsonb_set()
来完成
update the_table
set payload = jsonb_set(payload, '{testEvents}', payload -> 'testEvents' || '{"id":113070,"name1":"test2","count":18}');
部分 payload -> 'testEvents' || '{"id":113070,"name1":"test2","count":18}'
将新值附加到数组,然后 jsonb_set
用新数组替换 testEvents
下的数组。
我在 postgres table 中有 jsonb 数据类型列 "payload",其值如下:
{"testEvents": [
{
"id": 113068,
"name1": "test",
"count": 15
},
{
"id": 113069,
"name1": "test1",
"count": 15
}
]
}
现在我想通过向其添加一个 jsonobject 来更新内部 jsonarray。所以,我的结果会是
{"testEvents": [
{
"id": 113068,
"name1": "test",
"count": 15
},
{
"id": 113069,
"name1": "test1",
"count": 15
}
,
{
"id": 113070,
"name1": "test2",
"count": 18
}
]
}
我尝试了以下查询:
UPDATE table SET payload = payload ||'{"id":113070,"name1":"test2","count":18}';
但它正在替换以前的值。 由于我是这个主题的新手,任何人都可以帮助以正确的方式做到这一点。
jsonb_insert()
是你的函数
UPDATE mytable
SET jsondata =
jsonb_insert(jsondata, '{testEvents,0}', '{"id":113070, "name1":"test2","count":18}');
第二个参数定义必须插入新元素的路径。 0
是第一个位置。
您需要将新值附加到数组 ('testEvents'
) 而不是完整的 JSON 值。这可以使用 jsonb_set()
update the_table
set payload = jsonb_set(payload, '{testEvents}', payload -> 'testEvents' || '{"id":113070,"name1":"test2","count":18}');
部分 payload -> 'testEvents' || '{"id":113070,"name1":"test2","count":18}'
将新值附加到数组,然后 jsonb_set
用新数组替换 testEvents
下的数组。