【MongoDB 】MongoDB 介绍及应用,设计到4个案例

 MongoDB 介绍概述

基础概念

MongoDB 是非关系型数据库,也就是nosql,存储json数据格式会非常灵活,要比数据库mysql/MariaDB更好,同时也能为mysql/MariaDB分摊一部分的流量压力。

对于经常读写的数据他会存入内存,如此一来对于热数据的并发性能是相当高的,从而提升整体的系统效率。

另外呢,对于非事务的数据完全可以保存到MongoDB中,这些数据往往也是非核心数据。

一般来说,我们可以把一些非重要数据但是读写却很大的数据存储在MongoDB,比如我们自己的物流危化运输的车辆运行轨迹,GPS坐标,以及大气监测的一些动态指标等数据。又或者说咱们实战中的友情链接,友情链接在首页,这数据本身不重要,但是在首页里会经常被读到,并发读很大,所以放mongoDB中没毛病。

此外,mongodb提供的gridfs提供小文件存储,可以自己把控接口读取的权限,可以去限制,这一点也是有优势的,比如存储一些身份证信息啊,人脸信息啊都是可以的。


以下是MongoDB和数据库以及ElasticSearch(es没接触过的,待后续整合es后可以回过头来对比看看)的术语对比:

  • MongoDB可以创建多个数据库(同mysql)
  • 一个数据库可以创建多个collection(同mysql创建多表)
  • 一个集合可以包含很多文档数据(同mysql一张表包含很多行记录)

我们可以通过如下代码片段来更好的理解MongoDB的数据对比,假设这张表中总记录有3条:

UserList: [{userId: "1001",username: "lee",age: 18{userId: "1002",username: "jay",age: 20,sex: "boy"  },{userId: "1003",username: "jolin",age: 19,sex: "girl" }
]

如上述代码中:

  • UserList是一个collection,在mysql中可以当做是一张表
  • UserList中的每个{}都是一个json对象,他们称之为document文档,在mysql中称之为行记录
  • userId、username、age、sex 这些都是field 域,在MySQL中称之为column列字段
  • field 域可有可无,这样是非常灵活的,例如第一个dicument文档,中sex域是没有的

 Docker 安装配置MongoDB

安装

docker pull mongo:6.0.3

运行 mongodb:

docker run --name mongo \
-p 28028:27017 \
--restart always \
-d mongo:6.0.3 \
--auth
  • -p 27017:27017 :端口映射
  • --auth :开启密码访问

至此安装成功~!

配置admin账号

docker exec -it mongo mongo admin

报错:

原因:MongoDB 的5.x以上的版本使用mongo来执行mongodb命令已经不支持了,需要改用mongosh来替代mongo

docker exec -it mongo mongosh admin

创建admin账号

db.createUser({ user:'admin',pwd:'imooc',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});

测试成功

db.auth('admin', 'admin')

 MongoDB - HR职位信息举报

举报功能对于这个系统来讲,可有可无,举报量可能比较大,mysql数据库存储的瓶颈可能很快就会达到,解决数据库瓶颈会把一部分数据迁移到其他存储介质。

采用MongoDB原因
1.可有可无的数据
2.非常庞大的增加数据
MongoDB其他应用:日志的存储

整合MongoDB

pom父工程:

<dependency><groupId>org.mongodb</groupId><artifactId>mongodb-driver</artifactId><version>3.12.11</version>
</dependency>

pojo中引入:

 整合springboot,使用springboot提供的

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

为什么放在pojo微服务里?

不仅仅在我们的web里使用MongoDB,还会使用MongoDB相应的对象,有映射关系,以及ElasticSearch也有对应映射类,使用映射类,就会使用MongoDB的依赖坐标

配置文件(web-业务微服务模块)

uri: mongodb://username:password@localhost:27017/database
你需要替换usernamepasswordlocalhostdatabase为你的MongoDB服务器的实际用户名、密码、地址和数据库名

其他服务排除依赖

因为pojo服务引入了MongoDB依赖,AB服务引入了pojo依赖,A服务使用MongoDB,B服务不使用,不使用的则要在自动装配里排除

启动类操作如下: 

代码实现

controller:举报信息的MO对象:

@Ids:生成相应主键 

service:

数据层调用:

使用Springboot内部集成的JPA,String,为id的类型

结果:

调用成功后新增了一张表 

MongoDB - 限制重复举报

 controller

service

impl

mapper

根据接口名字findByReportUserIdAndJobId实现条件过滤操作

验证时候要保证数据只有一条,因为返回的类型为对象

MongoDB - 查询举报记录

页面效果

vue-vue视图界面

vue-data()对象

vue-api

controller

因为MongoDB数据库存储时间是带有时间时分秒

BO

service

impl

    @Autowiredprivate MongoTemplate mongoTemplate;@Overridepublic PagedGridResult pagedReportRecordList(SearchReportJobBO reportJobBO,Integer page,Integer pageSize) {String jobName = reportJobBO.getJobName();String companyName = reportJobBO.getCompanyName();String reportUserName = reportJobBO.getReportUserName();Integer dealStatus = reportJobBO.getDealStatus();LocalDateTime beginDate = reportJobBO.getBeginDateTime();LocalDateTime endDate = reportJobBO.getEndDateTime();// 1. 创建查询对象Query query = new Query();// 2. 创建条件对象//Criteria criteria = new Criteria();// 3. 设置查询条件参数if (StringUtils.isNotBlank(jobName)) {query = addLikeByValue(query, "job_name", jobName);}if (StringUtils.isNotBlank(companyName)) {query = addLikeByValue(query, "company_name", companyName);}if (StringUtils.isNotBlank(reportUserName)) {query = addLikeByValue(query, "report_user_name", reportUserName);}if (dealStatus != null) {query.addCriteria(Criteria.where("deal_status").is(dealStatus));}if (beginDate != null && endDate == null) {query.addCriteria(Criteria.where("created_time").gte(beginDate));} else if (beginDate == null && endDate != null) {query.addCriteria(Criteria.where("created_time").lte(endDate));} else if (beginDate != null && endDate != null) {query.addCriteria(Criteria.where("created_time").gte(beginDate).lte(endDate));}// 4. 查询记录总数,必须在分页前查询,否则总数不对long counts = mongoTemplate.count(query, ReportMO.class);// 5. 设置分页,Direction:方向Pageable pageable = PageRequest.of(page,pageSize,Sort.Direction.DESC,"created_time");query.with(pageable);// 6. 执行查询List<ReportMO> list = mongoTemplate.find(query, ReportMO.class);// 7. 封装分页grid信息数据PagedGridResult gridResult = new PagedGridResult();gridResult.setRows(list);gridResult.setPage(page);gridResult.setRecords(counts);return gridResult;}private Query addLikeByValue(Query query, String key, String value) {// 拼接 正则表达式和查询参数Pattern pattern = Pattern.compile("^.*" + value + ".*$");// 指定要查询的属性query.addCriteria(Criteria.where(key).regex(pattern));return query;}

MongoDB是文档类型数据库,全部是json数据,当在Navicat里复制一条数据时,全部变成String和数字类型,之前字段为DateTime类型或其他类型会失效,修改类型进行测试 

MongoDB - 违规处理HR职位

controller

service

impl

         

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/395661.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频剪辑SDK,人脸美化与滤镜特效,焕发直播新活力

在数字化浪潮席卷全球的今天&#xff0c;直播已成为连接品牌与消费者、创作者与观众的重要桥梁。为了在激烈的直播竞争中脱颖而出&#xff0c;提供高质量、富有创意的直播内容成为关键。美摄科技&#xff0c;作为视频处理技术的先行者&#xff0c;携手其强大的视频剪辑SDK解决方…

2024年计算机类学术会议有哪些

随着科技的飞速发展&#xff0c;计算机科学与技术领域正以前所未有的速度进步&#xff0c;各类学术会议成为了交流最新研究成果、探讨前沿技术趋势的重要平台。2024年&#xff0c;全球范围内将举办多场计算机类学术会议&#xff0c;这些会议不仅汇聚了顶尖的专家学者&#xff0…

一六三、go多版本安装与切换

如何安装多版本 官方安装方法 参考链接 当已安装某个版本后&#xff0c;执行如下命令 go install golang.org/dl/go1.19.7latest go1.19.7 download执行第一行命令后&#xff0c;会在GOPATH中新增go1.19.7。执行第二行命令后&#xff0c;会在sdk目录下载完整的包。 通过sm…

制造知识普及(十)-- 常见的工业软件介绍

「 1. ERP」 企业资源计划&#xff08;enterprise resource planning&#xff0c;ERP&#xff09;是制造企业的核心管理软件。ERP系统的基本思想是以销定产&#xff0c;协同管控企业的产、供、销、人、财、物等资源&#xff0c;帮助企业按照销售订单&#xff0c;基于产品的制造…

gitlab-runner /var/run/docker.sock connect permission denied

usermod -aG docker gitlab-runner sudo service docker restart参考&#xff1a;https://gitlab.com/gitlab-org/gitlab-runner/-/issues/3492

如何在 Android 手机/平板电脑上恢复误删除的 DCIM 文件夹

DCIM 文件夹是智能手机和平板电脑上最重要的文件夹之一。许多人报告说他们在 Android 设备上遇到了 DCIM 文件夹为空的问题。实际上&#xff0c;这种情况大多数情况下都会发生&#xff0c;当您意外从 Android 设备中删除 DCIM 文件夹或因病毒攻击、应用程序问题和意外格式化等原…

1-5 C语言 - 类型修饰符关键字const和volatile的概念及使用(超详细)

本节重点讲述类型修饰符关键字const和volatile的概念及使用&#xff0c;如果想详细了解关键字的同学点击下方链接进行跳转 1-1 C语言 - 关键字及其使用(数据类型)-CSDN博客 1-2 C语言 - 控制语句关键字-CSDN博客 1-3 C语言 - 控制语句的使用注意事项&#xff08;这些绝对是您…

2024鸿蒙开发【面试题库】,转岗看这一篇就够了

鸿蒙面试浪潮来袭&#xff0c;你是否也想着利用这次机会去实现&#xff0c;跳槽涨薪的梦呢&#xff1f; 如果关注了华为鸿蒙的人应该知道&#xff1a;鸿蒙开发岗位需求飙升6倍&#xff01; 可想而知该岗位前景多么广阔&#xff0c;为此就为大家整理些&#xff08;鸿蒙HarmonyO…

springboot社区旧物回收系统-计算机毕业设计源码94813

目 录 摘要 1 绪论 1.1 研究背景 1.2研究意义 1.3论文结构与章节安排 2 社区旧物回收系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 社…

SQL面试题练习 —— 计算用户首单是即时单的比例

目录 1 题目2 建表语句3 题解 题目来源&#xff1a;美团。 1 题目 在外卖订单中&#xff0c;有时用户会指定订单的配送时间。现定义&#xff1a;如果用户下单日期与期望配送日期相同则认为是即时单&#xff0c;如果用户下单日期与期望配送时间不同则是预约单。每个用户下单时间…

gogs的安装和使用(docker)

1.docker安装gogs 1.1 拉取gogs镜像 docker pull gogs/gogs #也可改为自己需要的版本号 1.2 创建存储目录 mkdir /root/gogs 1.3 运行镜像 docker run --namegogs -d -p 10022:22 -p 13000:3000 -v /root/gogs:/data gogs/gogs 1.3.1 指令解析 --namegogs: 指定名称…

文章复现 创新点 代码改进跑通 深度学习

文章复现 创新点 代码改进跑通 深度学习 SCI代码复现 文章复现 数据处理、数据分析、算法、数据结构data structure、机器学习machine learning、深度学习deep learning。创新改进&#xff0c;算法提升 python环境配置 &#xff0c;深度学习代码调试 、代码复现&#xff0c;py…

数据库优化

文章目录 一、如何定位慢查询二、分析慢SQL&#xff08;一&#xff09;Explain 三、索引介绍&#xff08;一&#xff09;数据结构1、二叉树2、红黑树3、B树4、B 树 &#xff08;二&#xff09;聚集索引&二级索引&#xff08;三&#xff09;索引的创建原则&#xff08;四&am…

ElementUI元件库在Axure中使用

一、ElementUI元件库介绍 ElementUI 是一套为开发者、UI/UX设计师和产品经理准备的基于Vue 2.0的桌面端组件库。它以其优雅的设计和丰富的组件&#xff0c;极大地提升了Web应用的开发效率与用户体验。ElementUI的组件设计精致且符合现代UI规范&#xff0c;包括按钮、表单、弹窗…

指针(一)

指针变量&#xff1a;用来存放地址的变量。 这里讲一下为什么两位为一个字节&#xff1a;首先这是一个十六进制的地址&#xff0c;再十六进制中的F&#xff08;15&#xff09;用二进制表示是需要四位&#xff08;1111&#xff09;&#xff0c;所以一位代表四个bit&#xff0c;两…

JavaEE 第7节 线程饥饿及其解决办法

目录 一、什么是线程饥饿&#xff1f; 二、线程饥饿的解决办法 *wait()与notify()方法解决线程饥饿 1、wait(等待) 2、notify(通知) 1&#xff09;notify 2&#xff09;notifyAll 3&#xff09;关于wait方法的一些补充 1、wait的方法的三个功能是原子性的&#xff1a;…

【mysql 第二篇章】请求到真正执行 SQL 到底是一个怎么样的过程?

从用户调用到SQL执行的流程中间发生了什么事情 1、网络请求使用 线程 来处理&#xff0c;当数据库连接池中监听到有连接请求&#xff0c;这个时候会分配一个线程来处理。 2、SQL接口 负责接收 SQL 语句&#xff0c;当线程监听到有请求和读取数据的之后&#xff0c;将 SQL 语句…

鸿蒙(API 12 Beta3版)【视频解码】 音视频编码

开发者可以调用本模块的Native API接口&#xff0c;完成视频解码&#xff0c;即将媒体数据解码成YUV文件或送显。 当前支持的解码能力如下&#xff1a; 视频硬解类型视频软解类型AVC(H.264)、HEVC(H.265)AVC(H.264) 视频解码软/硬件解码存在差异&#xff0c;基于MimeType创建…

【实现100个unity特效之15】最简单的方法使用shader graphs实现2d非像素和像素树叶草的随风摇摆效果

文章目录 前言非像素树叶草飘动效果新建材质效果像素树叶草飘动效果参考完结 前言 本文只是实现一个简单版本的2d树叶草随风摇摆的效果&#xff0c;如果你想要实现更加复杂的效果&#xff0c;包括2d互动草&#xff0c;你可以参考我之前的文章&#xff1a; 【推荐100个unity插件…

Docker 入门全攻略:安装、操作与常用命令指南

目录 Docker 入门全攻略&#xff1a;安装、操作与常用命令指南 一、引言 二、Docker 下载与安装 2.1 Docker 的系统要求 2.2 安装步骤 ①对于 Windows 的安装指南 ②对于 macOS 的安装指南 ③对于 Linux 的安装指南 三、Docker 的基本概念 3.1 镜像&#xff08;Image…