我的数据库 jsonb 列中有这个 json 格式
[
{
"firstName": "John",
"lastName": "Doe"
}
]
我想更新键“firstName”,该怎么做?
到目前为止我有这个查询:
UPDATE person
SET
field = jsonb_set(
field::jsonb,
concat('{0,firstName}')::text[],
'"newFirstName"'::jsonb)
但是上面的查询更新的是值而不是键。我怎样才能只更新键?
最佳答案
您可以在不使用 firstName
的情况下提取元素键,附加新的键/值,然后将其放回数组中:
update person
set field = jsonb_set(field,
'{0}',
((field -> 0) - 'firstName')||jsonb_build_object('newFirstName', field -> 0 -> 'firstName'));
(field -> 0) - 'firstName')
返回没有名字键的第一个元素。
然后jsonb_build_object('newFirstName', field -> 0 -> 'firstName')
使用新的键名构建一个新的键/值对,但现有值 firstName
并将其附加到使用 ||
的第一个表达式的结果中
然后使用 jsonb_set()
将上述结果放入第一个数组元素中
关于sql - 如何更新 json 对象的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58553637/