sql - 在 postgresql 中将新对象附加到 JSONB
问题描述
我试图在一个名为PARAM的列中将新对象添加到我的表中,在该列中我有:
{"array1": [
{"array2": [
{"objId": 1, "data": false, "repeat": 1},
{"objId": 2, "data": false, "repeat": 1}
]}
]}
我想将新对象添加到array2我正在使用该查询
UPDATE table
SET param = jsonb_set(
param::jsonb,
array['array1'],
(param->'array1'->>'array2')::jsonb || jsonb_build_object('objId', '3','data', 'false','repeat', '1')::jsonb)
WHERE ...
而是得到
{"array1": [
{"array2": [
{"objId": 1, "data": false, "repeat": 1},
{"objId": 2, "data": false, "repeat": 1},
{"objId": 3, "data": false, "repeat": 1}
]}
]}
我的PARAM变为空。任何人都可以解决这个问题?
解决方案
尝试这个:
select
jsonb_set(
param::jsonb,
'{array1,0,array2}',
jsonb_extract_path(param, 'array1','0','array2')::jsonb ||
jsonb_build_object('objId', '3','data', 'false','repeat', '1')::jsonb
)
您可以根据您的要求放置 where 子句