psql的jsonb操作--存储对象/对象数组
1. 建表
create table demo(
id serial NOT NULL PRIMARY KEY,
name VARCHAR(20),
info JSONB
);
2.存储对象操作
2.1添加
insert into demo (name, info)values ('张三1', '{"age":12, "class":"二年级"}');
insert into demo (name, info)values ('张三', '{"age":16, "class":"五年级"}');
insert into demo (name, info)values ('张三3', '{"age":20, "class":"初一"}');
2.2. 查询
2.2.1 查询年龄12岁的信息
这里好像是对象中的字符串匹配,如果把数字12变成"12"就会匹配不到
select * from demo where info @> '{"age":12}'::jsonb
2.2.2 查询年龄大于16岁的信息
这里将jsonb中的属性转化为了int
select * from demo where (info->>'age')::int4 > 16
2.3 修改
jsonb中的属性修改,某一键值对修改,使用jsonb_set函数
update demo as d set
info = jsonb_set
(
(select info from demo where id = d.id)::jsonb,-- target 这是目的json数据,这里使用内部关联将对应的json查询出来
'{class}', -- path 要修改的jsonb中对应的key
'"语文"'::jsonb, -- new_value 替换的value
false -- create_missing:: true:- 如果不存在对应的key值,则新增,反之,false - 不做其他操作,这里可有可无
) where id = 1;
3.存储对象数组
3.1添加
insert into demo (name, info)values ('李四', '[{"age":8, "class":"一年级"},{"age": 10, "class": "三年级"}]');
insert into demo (name, info)values ('李四2', '[{"age":12, "class":"五年级"},{"age":16, "class":"初三"}]');
insert into demo (name, info)values ('李四3', '[{"age":19, "class":"高一"},{"age":8, "class":"一年级"}, {"age":10, "class":"三年级"}]');
3.2 修改
3.2.1 追加对象数组
update demo set info = info || '[{"age":9,"class":"二年级"}]'::jsonb where id = 1;
3.2.2 修改数组中某一对象属性
update demo d set info = jsonb_set(
info,
array[
(select ORDINALITY::INT - 1 FROM demo d2,
jsonb_array_elements(info) WITH ORDINALITY WHERE d.id = d2.id AND value->>'class' = '三年级')::text, -- 确定到准确的对象中
'class' -- 需要修改的key
],
'"四年级"' -- 替换的value
)where id = 1;
3.3 查找
select * from demo where info @> '[{"class": "三年级"}]';
3.4 遍历
用到了jsonb_to_recordset函数
SELECT t.* FROM demo, jsonb_to_recordset(info) AS t(age int, class text) WHERE demo.id=7;
psql的jsonb操作--存储对象/对象数组的更多相关文章
- Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)
Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式) 原文地址:http://alanland.iteye.com/admin/blogs/1600685(欢迎转载 ...
- JS对象和数组在谷歌浏览器中引用存储的表现
大家都知道JS的数据分为基本类型和引用类型.具体什么不说了,今天主要说说对象和数组作为引用类型在谷歌浏览器中的表现. 首先,问题是这么发现的.我在控制台使用console打印了一个数组,然后对数组进行 ...
- 简述JavaScript对象、数组对象与类数组对象
问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
摘要: NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密码,网址等,NSUserDefaults肯定是首选,但是如果我们自定义了一个对象,对象保存的 ...
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象 - lady-奕奕的个人空间 - 开源中国社区
一.了解NSUserDefaults以及它可以直接存储的类型 NSUserDefaults是一个,在整个程序中只有一个实例对象,他可以用于数据的永久保存,而且简单实用,这是它可以让数据自由传递的一个前 ...
- LocalStorage存储JSON对象的问题
LocalStorage存储JSON对象的问题 localStorage - 没有时间限制的数据存储 1 var arr=[1,2,3]; 2 localStorage.setItem(" ...
- js操作文档对象的节点
好吧,为了能让大家不至于睡着,我们先回顾先前面的东东吧~ 1.首先我们写了javaScriput的是一门弱类型的解释性的脚本语言:弱类型:我们的变量不用申明其具体的数据类型,在使用的时候浏览器根据其存 ...
- 转-NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
转自:http://my.oschina.net/u/1245365/blog/294449 摘要 NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密 ...
- 深夜重温JavaScript中的对象和数组
这一块实际上已经学过了,因为没有学好,在工作过程中遇到一些对象或者数组的操作,会去百度查找,浪费了许多宝贵的时间,所以特地再拐过头来重新学习. 对象 基本概念: 对象这种基本的数据结构还有其他很多种叫 ...
随机推荐
- 27)PHP,视图
其实,视图就是一堆select形成的一个表格,但是这个表格也是存在一个数据库里面的,但是,他不会和一般的表格似得在数据库中显示,就好像虚拟存储器的那种感觉一样. 比如 必看我的一下句子 create ...
- 系统学习Javaweb5----JavaScript1
注意:java和JavaScript没有半毛钱关系!!! 说明:过年歇着歇着不知不觉就歇了七天,嘿嘿,从今天开始继续学习. 学习笔记: 1.JavaScript概述. 1.1.JavaScript是什 ...
- Spring Boot中@Async的作用
在Spring中,@Async这个注解用于标记的异步的方法.方法上一旦标记了这个方法,当其它线程调用这个方法时,就会开启一个新的线程去异步处理业务逻辑. 此注解的使用说明: 1.此注解可以用在方法上, ...
- 1088. Rational Arithmetic (20)
1.注意在数字和string转化过程中,需要考虑数字不是只有一位的,如300转为"300",一开始卡在里这里, 测试用例: 24/8 100/10 24/11 300/11 2.该 ...
- EncryptUtils
package me.zhengjie.core.utils; import org.springframework.util.DigestUtils; import javax.crypto.Cip ...
- JS UTC 昨天
var birthday = new Date("Jan 01, 1983 01:15:00") var formatDate = function (date) { ...
- 百度AI技术
利用百度提供接口,实现智能语音 语音合成 -- TTS(text to speech) 注册 在 ai.baidu.com 页面中点击 控制台 ,弹出登陆 / 注册页面 创建应用 登陆成功后,点击左侧 ...
- javascript常用知识汇总
javascript这个语言庞大而复杂,我用了三年多了,还是皮毛都不会.从刚开始的jquery,到后来的es6,每天都在学习,每天都在忘记. 1.禁止手机虚拟键盘弹出 在开发适配手机的页面时,出现了这 ...
- labview状态机
状态机主要由3部分组成,包括一个while循环,一个条件结构,以及while循环的移位寄存器,其中while循环用于保证程序的持续运行,条件结构用于处理不同状态的执行,移位寄存器用于实现从一个状态跳转 ...
- t分布|F分布|点估计与区间估计联系|
应用统计学 推断统计需要样本形容总体,就要有统计量.注意必须总体是正态分布,否则统计量的分布不能得到.卡方分布和t分布只要样本大于30都近似于正态分布. t分布和F分布推导及应用(图): 总体比例是π ...