【问题标题】:Update or delete value in nested jsonb object更新或删除嵌套 jsonb 对象中的值
【发布时间】:2020-04-08 22:08:31
【问题描述】:

我有两种情况要弄清楚。我在表中有一个 jsonb 列,其结构如下:

   {
    "1": {
        "a": 0.084,
        "b": 0.084,
        "c": 0.084
    },
    "2": {
        "a": 0.078,
        "b": 0.0814,
        "c": 0.078
    },
    "3": {
        "a": 0.0928,
        "b": 0.0975,
        "c": 0.0975
    }
   }

如果我想改变 "3":{"b":} 的值,我会怎么做呢?我尝试查看像 jsonb_set() 之类的函数,但这似乎我必须复制整个 jsonb 对象并在每次我想要更新时重新粘贴它价值。

我想解决的第二个问题是如果我想删除整个“3”:{} 对象,我似乎能找到的唯一解决方案是使用 jsonb_set() 再次。

感谢您的帮助!

【问题讨论】:

    标签: sql json postgresql jsonb


    【解决方案1】:

    您可以使用jsonb_set() 函数和相关路径'{3,b}'update

    SELECT jsonb_set(jsonb_data, '{3,b}','0.1') 
      FROM tab
    

    其中 0.1 只是一个样本值

    使用#- 运算符以delete

    SELECT jsonb_data #- '{3}'
      FROM tab
    

    Demo

    【讨论】:

    • 谢谢!效果非常好,并且完全符合我的需要。是否可以在同一个对象中使用多个值来做到这一点?就像我想同时设置 A、B 和 C 的值一样?再次感谢。
    • 不客气@ChristopherCarlisle。不可能在同一个对象中有多个值。
    猜你喜欢
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    相关资源
    最近更新 更多