JSONB-操作符
功能描述
Vastbase在PostgreSQL兼容模式下支持JSONB-
操作符,用于从JSON对象中删除键(以及它的值),或从JSON数组中删除匹配的字符串值。
使用场景
场景一:删除key和对应的value。
'{"a":"b", "c": "d"}'::jsonb - 'a' -->{"c": "d"}
'["a","b", "c", "d"]'::jsonb - 'b' -->["a": "c"]
场景二:删除所有的key或数组元素。
'{"a":"b", "c": "d"}'::jsonb - '{a,c}'::text[] -->{}
场景三:删除指定索引的数组元素。
'["a","b"]'::jsonb -1 -->["a"]
场景四:从document中去除key value。
注意事项
该功能仅在数据库兼容模式为PG时能够使用(即创建DB时DBCOMPATIBILITY='PG'),在其他数据库兼容模式下不能使用该特性。
仅Vastbase G100 V2.2 Build 10(Patch No.12)及以后补丁版本支持此功能。
语法格式
jsonb-text[]
参数说明
操作符 | 右操作数类型 | 描述 | 例子 |
---|---|---|---|
- | text | 从左操作数中删除键/值对或字符串元素。基于键值匹配键/值对。 | '{"a": "b"}'::jsonb - 'a' |
示例
前置步骤:创建并切换至兼容模式为PG的数据库。
CREATE DATABASE db_pg DBCOMPATIBILITY 'PG';
\c db_pg
示例1: 删除key和对应的值。
1、创建一个包含JSON对象的表。
CREATE TABLE my_table (
id serial primary key,
data jsonb
);
2、插入一条包含JSON对象的数据。
INSERT INTO my_table (data) VALUES ('{"name": "John", "age": 25, "city": "New York"}');
3、删除JSON对象中的指定key。
UPDATE my_table SET data = '{"name": "John", "age": 25, "city": "New York"}'::jsonb - 'city' where id=1;
4、查询结果。
SELECT * FROM my_table;
显示结果如下:
id | data
----+-----------------------------
1 | {"age": 25, "name": "John"}
(1 row)
5、删除测试表。
drop table my_table;
示例2: 删除所有的key或数组元素。
1、创建一个包含JSON对象的表。
CREATE TABLE my_table (
id serial primary key,
data jsonb
);
2、 插入一条包含JSON对象的数据。
INSERT INTO my_table (data) VALUES ('{"a":"b", "c": "d", "e": "f"}');
3、删除JSON对象中的所有key或数组元素。
UPDATE my_table SET data = '{"a":"b", "c": "d", "e": "f"}'::jsonb - '{a,c,e}'::text[] WHERE id = 1;
4、查询结果。
SELECT * FROM my_table;
显示结果如下:
id | data
----+------
1 | {}
(1 row)
5、删除测试表。
drop table my_table;
示例3: 删除指定索引的数组元素。
1、创建一个包含JSON对象的表。
CREATE TABLE my_table (
id serial primary key,
data jsonb
);
2、 插入一条包含JSON对象的数据。
INSERT INTO my_table (data) VALUES ('["a", "b", "c", "d"]');
3、删除JSON对象中的所有key或数组元素。
UPDATE my_table SET data='["a","b","c","d"]' :: jsonb -1 WHERE id = 1;
4、查询结果。
SELECT * FROM my_table;
显示结果如下:
id | data
----+-----------------
1 | ["a", "c", "d"]
(1 row)
5、删除测试表。
drop table my_table;
示例4: 从document中去除"zip":"35014"
key value。
1、创建一个包含JSON对象的表并插入数据。
create table tab_json (id char(4), description jsonb);
insert into tab_json values('0001','{
"city" : "ALPINE",
"zip" : "35014",
"loc" : {
"y" : 33.331165,
"x" : 86.208934
},
"pop" : 3062,
"state" : "AL"
}');
2、进行查询。
select * from tab_json;
查询结果如下:
id | description
------+---------------------------------------------------------------------------------------------------------
0001 | {"loc": {"x": 86.208934, "y": 33.331165}, "pop": 3062, "zip": "35014", "city": "ALPINE", "state": "AL"}
(1 row)
3、使用jsonb-操作符去除json数组中的指定元素进行查询。
select description::jsonb - 'zip' from tab_json;
查询结果如下:
?column?
-----------------------------------------------------------------------------------------
{"loc": {"x": 86.208934, "y": 33.331165}, "pop": 3062, "city": "ALPINE", "state": "AL"}
(1 row)