沧州*网站建设,公司部门工作总结,个人网站建设推广策划书,广州小程序定制开发MongoDB 介绍概述
基础概念
MongoDB 是非关系型数据库#xff0c;也就是nosql#xff0c;存储json数据格式会非常灵活#xff0c;要比数据库mysql/MariaDB更好#xff0c;同时也能为mysql/MariaDB分摊一部分的流量压力。
对于经常读写的数据他会存入内存#xff0c;如此… 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父工程
dependencygroupIdorg.mongodb/groupIdartifactIdmongodb-driver/artifactIdversion3.12.11/version
/dependencypojo中引入 整合springboot使用springboot提供的
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-mongodb/artifactId
/dependency为什么放在pojo微服务里
不仅仅在我们的web里使用MongoDB还会使用MongoDB相应的对象有映射关系以及ElasticSearch也有对应映射类使用映射类就会使用MongoDB的依赖坐标
配置文件web-业务微服务模块 uri: mongodb://username:passwordlocalhost:27017/database 你需要替换username、password、localhost和database为你的MongoDB服务器的实际用户名、密码、地址和数据库名
其他服务排除依赖
因为pojo服务引入了MongoDB依赖AB服务引入了pojo依赖A服务使用MongoDBB服务不使用不使用的则要在自动装配里排除
启动类操作如下 代码实现
controller举报信息的MO对象
Ids生成相应主键 service 数据层调用
使用Springboot内部集成的JPAString为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. 执行查询ListReportMO 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