【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
你需要替换username
、password
、localhost
和database
为你的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
相关文章:

【MongoDB 】MongoDB 介绍及应用,设计到4个案例
MongoDB 介绍概述 基础概念 MongoDB 是非关系型数据库,也就是nosql,存储json数据格式会非常灵活,要比数据库mysql/MariaDB更好,同时也能为mysql/MariaDB分摊一部分的流量压力。 对于经常读写的数据他会存入内存,如此…...

AI浪潮下的程序员生存指南:如何在智能时代锻造不可替代的核心竞争力
人工智能时代,程序员如何保持核心竞争力? 随着AIGC(如chatgpt、midjourney、claude等)大语言模型接二连三的涌现,AI辅助编程工具日益普及,程序员的工作方式正在发生深刻变革。有人担心AI可能取代部分编程工…...

Journyx soap_cgi.pyc接口XML外部实体注入漏洞复现 [附POC]
文章目录 Journyx soap_cgi.pyc接口XML外部实体注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现Journyx soap_cgi.pyc接口XML外部实体注入漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关技术…...

vue 日期控件 100天内的时间禁用不允许选择
vue 日期控件 100天内的时间禁用不允许选择,可以从101天选起 比如,2024年8月9号开始,100天内禁止选择,第101天之后的日期可以选,效果如图所示 // 日期控件代码 加上 :picker-options"pickerOptions" <…...

服务器HTTP响应头安全性优化与漏洞修复方案
在对服务器进行漏洞扫描后,通常会发现一些常见的安全漏洞,特别是涉及HTTP响应头的问题。以下是本次扫描过程中发现的漏洞问题以及对应的修复方案 1.X-Content-Type-Options 响应头缺失 描述: 缺失此响应头可能导致浏览器错误地解析资源类型,存在MIME类型混淆攻击的风险。 …...

4.定时器(TIMER)
理论 预分频寄存器(TIMx_PSC):由于时钟源为:72MHz,T 1/f 1/72MHz,由于不好计算周期时间,则需要分频,若分72则T 1/1MHz 1us(1MHz 一百万秒) 计数方式:向上(递增到某个数触发中断)、向下(递…...

java springboot mqtt控制海康摄像头
GHHKControlService 接口 package org.gh.ghhk.service;public interface GHHKControlService {boolean monitorControl(String payload);}GHHKControlServiceImpl 实现类 package org.gh.ghhk.service.impl;import com.alibaba.fastjson.JSONArray; import com.alibaba.…...

AI大模型02:Prompt Engineering 提示工程
一、什么是提示工程(Prompt Engineering) 1.提示工程,也叫“指令工程” (1)Prompt 就是我们给大模型发送的指令,或者说是在聊天对话框中发送的内容。 Prompt是AGI时代的编程语言。 Prompt是去控制大模型的…...

EasyExcel动态表头导出
1、封装方法 package com.skybird.iot.base.utils;import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.support.ExcelTypeEnum; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.w…...

可视化基础的设计四大原则
一个好的数据可视化设计可以帮助观众迅速理解数据背后的意义。然而,如何确保我们的可视化设计既美观又简单易懂呢?本文将介绍四大设计原则——亲密原则、对比原则、对齐原则和重复原则。 1、 亲密原则(Proximity) 定义与应用&am…...

MySQL基础练习题27-上升的温度
目录 题目 准备数据 分析数据 总结 题目 找出与之前(昨天的)日期相比温度更高的所有日期的 id 。 准备数据 ## 创建库 create database db; use db;## 创建表 Create table If Not Exists Weather (id int, recordDate date, temperature int);#…...

只出现一次的数字 II
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 示例 1: 输入:nums [2,2,3,2]…...

第十一章 数据仓库和商务智能 10分
11.1.0语境关系图 11.1 Q 建立数据仓库,有哪些步骤?如何建设?【6 个步骤非常重要!必须知道】 1. 理解需求(P)(目的明确,ETL) (1) 考虑业务目标和业务战略。 (2) 确定业…...

一篇文章带你解析完整数据结构-----满满干活值得收藏
数据结构是计算机科学中的一个重要分支,它涉及到计算机存储、组织数据的方式。以下是数据结构的主要知识点: 基本概念 数据(Data)。数据元素(Data Element):数据项(Data Item)&…...

11.3 用Python处理常见文件
欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…...

Linux知识复习第2期
RHCE 远程登录服务-CSDN博客 Linux 用户和组管理_linux用户和组的管理-CSDN博客 Linux 文件权限详解-CSDN博客 目录 1、sshd 免密登录 (1)纯净实验环境 (2)生成密钥 (3)上锁 2、用户管理 (1)添加新用户 (2)删除用户 (3)修改用户信息 (4)为用户账号设…...

驗證HTTP代理的有效性的方法和步驟-okeyproxy
如何驗證HTTP代理的有效性,確保它的性能和安全性,是非常必要的。本文將詳細介紹驗證HTTP代理有效性的方法和步驟。 HTTP代理作為一種仲介伺服器,它可以幫助用戶在訪問目標網站時隱藏真實IP地址,從而提高匿名性和安全性。通過HTTP…...

Java和kotlin 反射机制
Java 反射机制详解 Java 反射机制是一种强大的工具,使得程序可以在运行时动态地获取类的信息,并且可以在运行时操作类的成员变量、方法和构造函数等。以下是 Java 反射的详细讲解,包括其原理、使用场景、优缺点以及如何使用反射。 1. 反射的…...

Linux Shell编程--数组
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除! 一、简介 Shell 脚本中的数组允许你存储多个值,并可以通过索引访问它们。Shell 中的数组是一维的。 二、声明数组 在Shell…...

sheng的学习笔记-AI-k近邻学习(kNN)
AI目录:sheng的学习笔记-AI目录-CSDN博客 什么是k近邻学习 k近邻(k-Nearest Neighbor,简称kNN)学习是一种常用的监督学习方法,是一种基本的分类与回归方法。 分类问题:对新的样本,根据其 k 个…...

ShardingSphere之ShardingProxy集群部署
文章目录 介绍使用Zookeeper进行集群部署统一ShardingJDBC和ShardingProxy配置通过Zookeeper注册中心同步配置直接使用ShardingProxy提供的JDBC驱动读取配置文件 介绍 开发者手册 在conf/server.yaml配置文件中有下面这一段配置,就是关于集群部署的 mode: # typ…...

同态加密和SEAL库的介绍(六)BGV 方案
前面介绍 BFV 和 CKKS 加密方案,这两者更为常用。并且也解释了 Batch Encoder 和 级别的概念,这对接下来演示 BGV 会很有帮助。 一、BGV简介 BGV (Brakerski-Gentry-Vaikuntanathan) 方案 是一种基于环学习同态加密(RLWE)问题的加…...

uniapp微信小程序 canvas绘制圆形半透明阴影 createCircularGradient函数不支持透明度部分解决方案
背景 我需要在微信小程序中,用canvas绘制一个圆形钟表,在ui设计图中,有一部分阴影,这里我节选一下: 即深色发黑的部分 canvas通用阴影绘制 由于canvas中并不支持css那样简单的方式为圆形添加阴影或高光,…...

W34KN3SS靶机
信息收集: 靶机地址:https://www.vulnhub.com/entry/w34kn3ss-1,270/# (1)ip扫描 nmap 192.168.254.0/24 -sn | grep -B 2 00:0C:29:E8:66:AB (2)端口扫描 nmap -p- -A 192.168.254.145 (3&…...
8.9套题
A. 猴猴吃苹果 题意:给定根节点k,求访问点的顺序,使得每次从上一个点到当前点的权值最大。访问过的点权值为0。权值一样时,输出最小编号 思路:由于是双向边,先求根节点到每一个节点的距离值。在第一轮中&…...

Python 爬取网页水务数据并实现智慧水务前端可视化
提示:本文爬取深圳市环境水务集团有限公司的公开数据作为数据样例进行数据分析与可视化。 文章目录 一、爬虫二、对爬取的数据进行数据库、excel的存储与数据处理1.代码实现 三、应用Flask框架将后端获取数据后渲染到前端四、前端Echarts的使用1.下载echarts.min.js…...

百度智能云发布3款轻量级+2款场景大模型
文心大模型ERNIE 3.5是目前百度智能云千帆大模型平台上最受欢迎的基础大模型之一。针对用户的常见通用的对话场景,ERNIE 3.5 在指令遵循、上下文学习和逻辑推理能力三方面分别进行了能力增强。 ERNIE Speed作为三款轻量级大模型中的“大个子”,推理场景…...

UE基础 —— 编辑器界面
菜单栏 UE中每个编辑器都有一个菜单栏,部分菜单会出现在所有编辑器窗口中,如File、Window、Help,其他则是其编辑器特有的; 主工具栏 UE中部分最常用的工具和命令的快捷方式; 1,保存按钮(ctrls&a…...

2024年Vue组件库大比拼:谁将成为下一个Element?
2024 年,Vue生态蓬勃发展,越来越多的开发者开始探索更适合自己项目的组件库。 今天我们来看一下2024年最受欢迎的几款Vue开源组件库,除了Element,开发者们还有哪些选择呢? 1.Vuetify Vuetify是由社区支持的Vue组件库&…...

SS9283403 sqlite3交叉编译并部署到SS928(六)
1.Sqlite3下载 连接:SQLite Download Page 2.解压 tar zxvf sqlite-autoconf-3460000.tar.gz 3.配置并编译 进入解压目录,打开命令行,输入如下命令 ./configure CCaarch64-mix210-linux-gcc --hostarm-linux --prefix/home/mc/work/sqlite…...