Mysql内储存JSON字符串,如何根据json字段内容作为查询条件(包括json数组)检索数据

mysql5.7以上支持json的操作,以及增加了json存储类型
一般数据库存储json类型的数据会用json类型或者text类型

mysql根据json字段的内容检索查询数据

  • 使用 字段->'$.json属性'进行查询条件
  • 使用json_extract函数查询,json_extract(字段,"$.json属性")
  • 根据json数组查询,用JSON_CONTAINS(字段,JSON_OBJECT('json属性', "内容"))

比如如下数据

1
2
3
select * from log where data->'$.id' = 142;
或者
select data->'$.id' id,data->'$.name' name from log where data->'$.id' = 142;

  对于JSON 数据的数据

用JSON_CONTAINS(字段,JSON_OBJECT(‘json属性’, “内容”))

1
select * from log2 where JSON_CONTAINS(data,JSON_OBJECT('id', "142"))

  通过以上的学习,下面是针对自己的业务数据而使用的查询语句和结果

1
2
3
4
5
6
7
8
-- 精确查询
select operator_name,objects  from feishu_log where JSON_CONTAINS(objects,JSON_OBJECT('object_name', "测试"));
-- 精确查询
select operator_name,objects,objects->'$[*].object_name' objectName from feishu_log where objects->'$[*].object_name' = '测试';
-- 模糊查询,而且返回json中的某个字段的内容
select operator_name,objects,objects->'$[*].object_name' objectName from feishu_log where objects->'$[*].object_name' like '%测试%';
-- 模糊查询,而且返回json中的某个字段的内容
select  operator_name,objects,objects->'$[*].object_name' objectName  FROM feishu_log   WHERE (objects ->> '$[*].object_name' LIKE CONCAT('%','测试','%')) ;

  精确查询无结果,模糊查询有结果

 

 使用lamda表达式去查询

queryWrapper.apply(oConvertUtils.isNotEmpty(feishuLog.getObjectName()), "objects ->> '$[*].object_name' LIKE CONCAT('%',{0},'%')", feishuLog.getObjectName());

 

posted @   张亮java  阅读(2876)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2021-10-19 Building for production... ERROR TypeError: Cannot read property ‘createHash‘ of undefined
2021-10-19 nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)错误解决办法
点击右上角即可分享
微信分享提示