Postgresql - 更新或删除嵌套jsonb元素

时间:2017-07-05 16:57:09

标签: json postgresql jsonb

有没有办法删除/更新嵌套的json密钥对象(不是数组) 例如以下json:

{
  "top": {
    "nested": {
       "leaf": 1
    }
  }  
}

如何删除/更新叶元素?

我试过

SELECT jsonb '{"top": {"nested": {"leaf" : 1}}' - '{top,nested,leaf}'

但没有运气

1 个答案:

答案 0 :(得分:11)

您需要使用#-运算符,而不是-

SELECT jsonb '{"top": {"nested": {"leaf" : 1}}}' #- '{top,nested,leaf}';
┌─────────────────────────┐
│        ?column?         │
├─────────────────────────┤
│ {"top": {"nested": {}}} │
└─────────────────────────┘
(1 row)

来自documentation

  • -(给定text参数):从左操作数中删除键/值对或字符串元素。键/值对基于其键值进行匹配。
  • -(给定int参数):删除具有指定索引的数组元素(从结尾开始的负整数计数)。如果顶级容器不是数组,则会引发错误。
  • #-:删除具有指定路径的字段或元素(对于JSON数组,从末尾开始计算负整数)