VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

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)