使用自己的键将 JSONB 字段从单个值转换为对象
Convert JSONB field from single value to object with own keys
我有一个table,我们称它为myTable,结构如下
ID | data
____________
uuid | jsonb
jsonb字段中的数据是一个结构如下的数组:
[
{
"valueA": "500",
"valueB": "ABC",
},
{
"valueA": "300",
"valueB": "CDE",
}
]
我想做的是通过将 valueB 转换为一个对象来转换该数据,其中 newKey 对应于“valueB”的当前值
这是我想要的结果:
[
{
"valueA": "500",
"valueB": {"newKey": "ABC"},
},
{
"valueA": "300",
"valueB": {"newKey": "CDE"},
}
]
我尝试使用以下查询进行操作:
UPDATE myTable
SET data = (
SELECT jsonb_agg (
jsonb_insert(elems, '{valueB, newKey}', elems->'valueB')
)
FROM jsonb_array_elements(data) elems
);
不幸的是,它似乎没有做任何事情。
我的另一个想法是创建一个新字段,将其初始化为一个对象,然后删除旧的 onde 并重命名新的,但似乎必须有一种方法可以直接做我想做的事?
解决
UPDATE myTable
SET data = (
SELECT jsonb_agg (
jsonb_insert(elems, '{valueB}', jsonb_build_object('newKey', elems->'valueB'))
)
FROM jsonb_array_elements(data) elems
);
我有一个table,我们称它为myTable,结构如下
ID | data
____________
uuid | jsonb
jsonb字段中的数据是一个结构如下的数组:
[
{
"valueA": "500",
"valueB": "ABC",
},
{
"valueA": "300",
"valueB": "CDE",
}
]
我想做的是通过将 valueB 转换为一个对象来转换该数据,其中 newKey 对应于“valueB”的当前值
这是我想要的结果:
[
{
"valueA": "500",
"valueB": {"newKey": "ABC"},
},
{
"valueA": "300",
"valueB": {"newKey": "CDE"},
}
]
我尝试使用以下查询进行操作:
UPDATE myTable
SET data = (
SELECT jsonb_agg (
jsonb_insert(elems, '{valueB, newKey}', elems->'valueB')
)
FROM jsonb_array_elements(data) elems
);
不幸的是,它似乎没有做任何事情。
我的另一个想法是创建一个新字段,将其初始化为一个对象,然后删除旧的 onde 并重命名新的,但似乎必须有一种方法可以直接做我想做的事?
UPDATE myTable
SET data = (
SELECT jsonb_agg (
jsonb_insert(elems, '{valueB}', jsonb_build_object('newKey', elems->'valueB'))
)
FROM jsonb_array_elements(data) elems
);