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

13

有没有一种方法可以删除/更新嵌套的JSON键对象(而不是数组) 例如以下JSON:

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

我该如何删除/更新叶子元素?

我尝试了:

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

但没有成功。

1个回答

34

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

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

来自文档:

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

它如何知道要执行那个操作的表格呢? - ennth
2
@ennth:你的意思是什么?如果你有一个带有jsonb列j的表t,你可以执行SELECT j -# '{to,remove}' FROM t - Marth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接