sql - 如何更新 json 对象的键?

标签 sql json postgresql

我的数据库 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() 将上述结果放入第一个数组元素中


在线示例:https://rextester.com/YPF75074

关于sql - 如何更新 json 对象的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58553637/

相关文章:

python - 如何将具有换行符和制表符的python文件读入字符串?

postgresql - Postgres - 计算累积数据的变化

sql - Postgres 列不存在,但它带有别名

c# - 更新数据库上的插入值不正确 - MVC

mysql - 在 SQL 查询的 WHERE 子句中的 CASE 语句之间使用 AND

php - Codeigniter MYSQL QUERY insert_string 避免重复

javascript - 如何使用平均堆栈访问 Schema.ObjectId 以获取客户端上的对象 json?

c# - 在 Sitecore 中无法访问 WebMethod

postgresql - 将 UNIQUE 约束转换为 CHECK 或触发器

postgresql - spring data jpa 中自定义/ native 查询中 IN 子句的更快/高效替代方案