JSONB_SET
功能描述
Vastbase支持JSONB_SET函数,可以替换指定路径上的值或者在指定的路径上插入值。
函数返回给定的JSONB值,其中指定的路径被新值替换,或者 create_missing 为true(默认值) 时添加新的值。
注意事项
- 路径中的所有前值都必须存在,否则将不加改变地返回target。
- 出现在路径中的负整数从从JSON数组的path末尾开始计数。
- 如果最后一个路径步骤是超出范围的数组索引,并且create_missing为真,则新值将添加到数组的开头(如果索引为负),或添加到数组的结尾(如果索引为正)。
语法格式
jsonb_set(target jsonb, path text[], new_value jsonb[, create_missing boolean]) -> JSONB
参数说明
target
要插入新值的 JSONB 值。
path
一个文本数组,指示了新值插入的位置。数组中靠前的路径,应该包含数组中靠后的路径。
new_value
要插入的新值。
create_missing
指示如果指定的路径不存在时是否添加指定的新值。缺省值为true。
若create_missing为true,且通过path指定部分不存在,则添加new_value。
示例
示例1 : create_missing为false且通过path指定部分不存在时,不添加new_value。
select jsonb_set('[{"f1":1,"f2":null},{"2":9},{"null":90},{"3":87}]', '{1,aa}', '[2,3,4]', false);
返回结果为如下,未添加new_value:
jsonb_set
------------------------------------------------------------
[{"f1": 1, "f2": null}, {"2": 9}, {"null": 90}, {"3": 87}]
(1 row)
示例2 : create_missing为true(缺省)且通过path指定部分不存在时,添加new_value。
索引为正数时:
select jsonb_set('[{"f1":1,"f2":null},{"2":9},{"null":90},{"3":87}]', '{1,aa}', '[2,3,4]');
返回结果为如下,在数组结尾添加new_value:
jsonb_set ----------------------------------------------------------------------------- [{"f1": 1, "f2": null}, {"2": 9, "aa": [2, 3, 4]}, {"null": 90}, {"3": 87}] (1 row)
在数组的指定位置中插入了新值:
select jsonb_set('[{"f1":1,"f2":null},{"2":9},{"null":90},{"3":87}]', '{-4,bb}', '[2,3,4]');
返回结果为如下,在数组开头添加new_value:
jsonb_set ----------------------------------------------------------------------------- [{"bb": [2, 3, 4], "f1": 1, "f2": null}, {"2": 9}, {"null": 90}, {"3": 87}] (1 row)