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 文档。