postgresql - postgresql的`jsonb_set`中的`target`是什么意思?
问题描述
我jsonb
在 postgresql11 的列中使用类型。我想更新 json 数据中的一个字段,我看到有一个jsonb_set
可以使用的函数。(https://www.postgresql.org/docs/current/functions-json.html)。
但是,根据文件,
jsonb_set ( target jsonb, path text[], new_value jsonb [, create_if_missing boolean ] ) → jsonb
返回 target,将 path 指定的项目替换为 new_value,或者如果 create_if_missing 为 true(这是默认值)并且 path 指定的项目不存在,则添加 new_value。路径中的所有早期步骤都必须存在,否则目标将原封不动地返回。与面向路径的运算符一样,出现在路径中的负整数从 JSON 数组的末尾开始计数。如果最后一个路径步骤是超出范围的数组索引,并且 create_if_missing 为真,则如果索引为负,则将新值添加到数组的开头,如果索引为正,则将新值添加到数组的末尾。
第一个论点是target
。这里是什么target
意思?我是否需要进行查询以获取现有值并将其设置为target
?
我试过下面的更新语句:
我目前的数据是:
# select "taxes" from "Sites" where "id" = '6daa9b5d-d5b2-4b0d-a8ee-5ad2cb141594';
taxes
--------------------------------------------------------------------------------------------------------------
{"feePercent": 0, "percent": 0}
我尝试了以下更新:
# update "Sites" set "feePercent" = jsonb_set('{"feePercent": 0, "percent": 0}', '{feePercent}', 1) where "siteUuid"='6daa9b5d-d5b2-4b0d-a8ee-5ad2cb141594';
但我得到以下错误:
ERROR: function jsonb_set(unknown, unknown, integer) does not exist
LINE 1: update "Sites" set "feePercent" = jsonb_set('{"feePerce...
解决方案
jsonb_set()
修改特定的 JSON 对象。因此,您的目标是您要修改的 JSON 对象(或 JSON 列)。
jsonb_set(my_jsonb_to_be_modified, ...)
所以,如果你有这个 JSON 对象;
{"my":"old", "json":"object"}
使用该功能,您可以将其变成:
{"my":"new", "json":"object"}
代码是:
SELECT jsonb_set('{"my":"old", "json":"object"}', '{my}', '"new"')
是target
原始 JSON 对象,path
指向您要修改的元素,并且new_value
是您在路径中指定的元素的新值。
在那种情况下,我的值old
变成了new
现在。
推荐阅读
- python - 如何在 Angular 9 中集成 python 脚本?
- reactjs - 当元素出现在 50 张卡片上时,如何使用 .map() 函数在点击屏幕上显示的元素之一下方放置一个框
- c# - 如何使用正确的 MVVM 在不同的内容页面 Xamarin 中传递数据
- git - 德比安。当我使用 `git restore` 命令时,它说,这个命令不存在
- r - 如何根据字符串的第一个和第三个字符过滤一列字符串?
- java - 将 ArrayList 中的两组值与重复配对的逻辑
- python - Python:如何在 pandas.Series 中剥离字符串?
- javascript - 来自特定选择器的 JQuery 组件
- c# - 使用 Visual Studio 安装程序安装后的 .NET WPF 运行时错误
- flutter - 从 Flutter 前端注册到 aqueduct 后端