json类型以文本方式存储json对象,把输入的数据原封不动的存放到数据库中,会保留多余的空格,保留重复的Key,保留Key的顺序。

jsonb类型转换文本格式json对象为二进制格式,不保留多余的空格,不保留重复的Key,不保留Key的顺序,同时支持索引。

jsonb类型除了支持json类型的操作符外,还支持以下的操作符。

继续使用之前的student表添加jsonb数据类型列

alter table student add (stu_info_b jsonb);
update student set stu_info_b = stu_info;



可以看到jsonb类型的数据结构已经发生了变动。

@>和<@操作符

test=# select stu_info_b @> '{"name": "lisi"}' from student;
?column?
----------
t
f
f
f
(4 行记录)
test=# select stu_info_b @> '{"rank": 12}' from student;
?column?
----------
f
f
f
f
(4 行记录)
test=# select stu_info_b @> '{"information":{"branch": "Computer"}}' from student;
?column?
----------
t
t
f
f
(4 行记录)
test=# select stu_info_b from student where stu_info_b @> '{"information":{"branch": "Computer"}}';
stu_info_b
--------------------------------------------------------------------------------------------------------
{"name": "lisi", "information": {"rank": 12, "branch": "Computer", "mobile_number": "13700000001"}}
{"name": "zhangsan", "information": {"rank": 1, "branch": "Computer", "mobile_number": "13700000002"}}
(2 行记录)

从结果可以看出 @> 操作符只能判断jsonb对象顶层是否包含右侧的数据,无法单独判断嵌套结构中的键值。

<@ 操作符与之相反,用于判断左边的json对象是否包含与右边。

?操作符、?|操作符和?&操作符

test=# select stu_info_b ? 'rank'  from student;
?column?
----------
f
f
f
f
(4 行记录) test=# select stu_info_b ? 'name' from student;
?column?
----------
t
t
t
t
(4 行记录) test=# select stu_info_b -> 'information' ? 'rank' from student;
?column?
----------
t
t
t
t
(4 行记录) test=# select stu_info_b ?| array['name','id'] from student;
?column?
----------
t
t
t
t
(4 行记录) test=# select stu_info_b ?| array['rank','id'] from student;
?column?
----------
f
f
f
f
(4 行记录) test=# select stu_info_b ?& array['name','id'] from student;
?column?
----------
f
f
f
f
(4 行记录) test=# select stu_info_b ?& array['name'] from student;
?column?
----------
t
t
t
t
(4 行记录)

这3个符号都只能判断json对象的顶层的情况,对于嵌套对象需要借助 -> 操作符来进行判断。

jsonb操作符的更多相关文章

  1. 一些简单的PGSQL 操作

    1.jsonb字段的查询 enterprisearr 字段类型为jsonb,存储格式为["物流服务商","销售服务商","供应商"]. SE ...

  2. PostgreSQL中JSON、JSONB基本操作符

    PostgreSQL 9.5以上的版本中有了很多方便的操作符,使得操作 JSON 变得非常方便了. 一. -> 和 ->> : -> 表示获取一个JSON数组元素,支持下标值( ...

  3. 关于pgsql 的json 和jsonb 的数据查询操作笔记整理

    关于pgsql 的json 和jsonb 的数据处理笔记 1. json 和jsonb 区别两者从用户操作的角度来说没有区别,区别主要是存储和读取的系统处理(预处理)和耗时方面有区别.json写入快, ...

  4. PostgreSQL存取jsonb

    从PostgreSQL 9.3开始,json就成了postgres里的一种数据类型,也就是和varchar.int一样,我们表里的一个字段的类型可以为json了. 与此同时,postgres还提供了j ...

  5. 关于pgsql 几个操作符的效率测试比较

    关于pgsql 几个操作符的效率测试比较1. json::->> 和 ->> 测试方法:单次运行100次,运行10个单次取平均时间.测试结果:->> 效率高 5% ...

  6. Oracle 的基本操作符

    != 不等于 select empno,ename,job from scott.emp where job!='manager' ^= 不等于 select empno,ename,job from ...

  7. javascript中的操作符详解1

    好久没有写点什么了,根据博主的技术,仍然写一点javascript新手入门文章,接下来我们一起来探讨javascript的操作符. 一.前言 javascript中有许多操作符,但是许多初学者并不理解 ...

  8. c# 基础 object ,new操作符,类型转换

    参考页面: http://www.yuanjiaocheng.net/webapi/config-webapi.html http://www.yuanjiaocheng.net/webapi/web ...

  9. oracle操作符

    Oracle中算术操作符(+)(-)(*)(/) 值得注意的是:/ 在oracle中就相当于显示中的除法 5/2 = 2.5 比较操作符: 其中等号可以换成其他运算符:(后面为该操作符的单条件查询样例 ...

  10. C# 本质论 第三章 操作符和控制流

    操作符通常分为3大类:一元操作符(正.负).二元操作符(加.减.乘.除.取余)和三元操作符( condition?consequence:alternative(consequence和alterna ...

随机推荐

  1. Java并发编程实例--20.使用Semaphores(信号量)控制资源的并发读取

    前面我们介绍了2种同步机制: 1)使用synchronized关键字 2)使用Lock接口及其实现类: ReentrantLock,ReentrantReadWriteLock.ReadLock, a ...

  2. 详解SSL证书系列(1)什么是SSL证书?

    你一定遇到过这种情况,打开一个网站,浏览器弹出警告"您与此网站之间建立的连接不安全.由于此连接不安全,因此信息(如密码或信用卡)不会安全地发送到此网站,并且可能被其他人截获或看到" ...

  3. typing的中的Optional说明

    from typing import Optional def show_count(count: int, singular: str, plural: Optional[str] = None) ...

  4. 【LeetCode双指针】合并两个有序数组,从后向前遍历

    合并两个有序数组 https://leetcode.cn/problems/merge-sorted-array/ 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m ...

  5. 进击的 AI 生成,创造性的新世界!

    2022年,AI艺术生成文本生成图像的AI绘画生成器如雨后春笋般涌现,以一幅幅"不明觉厉"的AI作品进入大众视野.从2月Disco Diffusion爆火,仅两个月后OpenAI发 ...

  6. ABP模块的测试项目从默认的Microsoft SQL Server替换成MySQL

    1.替换项目引用 2.重新生成解决方案 3.删除Migrations 4.模块的引用 替换成:AbpEntityFrameworkCoreMySQLModule 5.命名空间 替换成:Volo.Abp ...

  7. 【Azure App Service for Linux】NodeJS镜像应用启动失败,遇见 RangeError: Incorrect locale information provided

    问题描述 在App Service For Linux 中,部署NodeJS应用,应用启动失败. 报错信息为: 2023-08-29T11:21:36.329731566Z RangeError: I ...

  8. Vue3学习(二十二)- 保存文档内容

    写在前面 前面已经调整了布局,富文本编辑器也能正确显示了,那么接下来就是怎么把数据保存到数据库里了,那么怎么做呢? 保存文档内容并显示 1.任务拆解 前端获取输入富文本框的html内容 改造保存接口, ...

  9. python用matplotlib或boxplot作图的时候,中文标注无法正常显示,乱码为小方框的解决办法

    第一种 import matplotlib.pyplot as plt plt.rc("font",family="SimHei",size="22& ...

  10. 10、zookeeper的leader选举

    leader选举 服务器状态 looking:寻找leader状态.当服务器处于该状态时,它会认为当前集群中没有leader,因此需要进入leader选举状态 following:跟随着状态.表明当前 ...