暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL jsonb_set() 函数

原创 游湖 2023-02-19
678

PostgreSQL jsonb_set() 函数

PostgreSQL jsonb_set() 函数替换指定的路径上的值或者在指定的路径上插入值。

jsonb_set() 语法

这是 PostgreSQL jsonb_set() 函数的语法:

jsonb_set(
  target JSONB, path TEXT[], new_value JSONB[, create_if_missing BOOLEAN]
) -> JSONB

参数

target
必需的。 要插入新值的 JSONB 值。
path
必需的。 一个文本数组,指示了新值插入的位置。数组中靠前的路径,应该包含数组中靠后的路径。
new_value
必需的。 要插入的新值。
create_if_missing
可选的。 它指示如果指定的路径不存在时是否添加指定的新值。默认值为 true

返回值

PostgreSQL jsonb_set() 函数返回给定的 JSONB 值,其中指定的路径被新值替换,或者 create_if_missing 为 true (默认值) 时添加新的值。

如果任意一个参数 new_value 为 NULL,jsonb_set() 函数将返回 NULL。

jsonb_set() 示例

数组

下面的示例展示了如何使用 PostgreSQL jsonb_set() 函数更新一个 JSON 数组中的元素。

SELECT jsonb_set('[0, 1, 2]', '{1}', '"x"');

  jsonb_set
-------------
 [0, "x", 2]

这里,路径数组 {1} 指向 [0, 1, 2] 数组中的索引为 1 的元素。

下面的示例展示了如何使用 PostgreSQL jsonb_set() 函数更新一个内嵌的 JSON 数组中的元素。

SELECT jsonb_set('[0, [1, 2], 2]', '{1, 1}', '"x"');

    jsonb_set
------------------
 [0, [1, "x"], 2]

这里,路径数组 {1, 1} 指向数组 [0, [1, 2], 2] 中的索引为 1 的内嵌数组中的索引为 1 的元素。

对象

下面的示例展示了如何使用 PostgreSQL jsonb_set() 函数更新一个 JSON 对象中的字段。

SELECT jsonb_set('{"x": 1}', '{x}', '"x"');

 jsonb_set
------------
 {"x": "x"}

下面的示例展示了如何使用 PostgreSQL jsonb_set() 函数在一个 JSON 对象中插入一个新的字段。

SELECT jsonb_set('{"x": 1}', '{y}', '2');

    jsonb_set
------------------
 {"x": 1, "y": 2}

这里,由于 JSON 对象 {"x": 1} 中不存在路径 y,因此 jsonb_set() 在 JSON 对象 {"x": 1} 中插入一个值为 2 的字段 y。当然,您也可以通过将 create_if_missing 设置为 false 来禁止这种默认插入的行为,比如:

SELECT jsonb_set('{"x": 1}', '{y}', '2', false);

 jsonb_set
-----------
 {"x": 1}

这里,因为禁止了默认插入的行为,因此返回了原来的 JSON 文档。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论