SpringBoot集成MongoDB
前言
之前写了各种nosql数据库的比较,以及相关理论,现在我在本地以springboot+MongoDB框架,探究了具体的运行流程,下面总结一下,分享给大家。
运行前准备
安装并启动MongoDB应用程序
参考网址:
windows
http://www.runoob.com/mongodb/mongodb-window-install.html
linux
http://www.runoob.com/mongodb/mongodb-linux-install.html
在MongoDB应用工具中查询数据增删改效果(rebo3t)
下载地址:https://robomongo.org/download
lombok安装
参考网址:https://www.cnblogs.com/fqszywz/p/7733703.html
代码运行
代码下载:https://github.com/a123demi/spring-boot-integration
代码主要讲解
主要依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
数据库连接
spring.application.name=spirngboot-int-mongodbeg spring.data.mongodb.database=admin
spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.password=root
spring.data.mongodb.port=27017
spring.data.mongodb.username=root
通过MongoTemplate来调用各种增删改查的语句,比如
Query query=new Query(Criteria.where("userName").is(userName));
UserEntity user = mongoTemplate.findOne(query , UserEntity.class);
涉及的主要关键函数有
增
mongoTemplate.save(user);
删
mongoTemplate.remove(query,UserEntity.class);
改
Update update= new Update().set("userName", user.getUserName()).set("passWord", user.getPassWord());
//更新查询返回结果集的第一条
WriteResult result =mongoTemplate.updateFirst(query,update,UserEntity.class);
查
Query query=new Query(Criteria.where("userName").is(userName));
UserEntity user = mongoTemplate.findOne(query , UserEntity.class);
高级查询
分页查询
//利用工具类拼装分页信息
SpringbootMongoDBPageable pageable = new SpringbootMongoDBPageable();
MongoDBPageModel pm=new MongoDBPageModel();
pm.setPagesize(3);
pm.setPagenumber(1);
List<Order> orders = new ArrayList<>();
//排序信息
orders.add(new Order(Direction.DESC, "age"));
Sort sort = new Sort(orders);
pm.setSort(sort);
pageable.setPage(pm);
//拼装查询信息
Query query = new Query();
Criteria criteria = new Criteria();
query.addCriteria(criteria.where("age").gte(6).lte(18));
//检索6-18岁的
query.addCriteria(criteria.where("name").regex("文"));
//模糊查询名字
Long count = mongoTemplate.count(query, OrdersData.class);
//查询总记录数
List<Entry> list = mongoTemplate.find(query.with(pageable), Entry.class);
//分页聚合查询(多表多条件关联分页查询)
//mongodb中有两个表,一个是人物表 一个是宠物表,一个人可以有多个宠物
//人物表字段为 String id, Integer age,String remark;
//宠物表字段为 String id, String manId,String age,String remark;
//拼装分页信息
SpringbootMongoDBPageable pageable = new SpringbootMongoDBPageable();
MongoDBPageModel pm=new MongoDBPageModel();
pm.setPagesize(2);
pm.setPagenumber(1);
List<Order> orders = new ArrayList<>();
//排序
orders.add(new Order(Direction.DESC, "age"));
Sort sort = new Sort(orders);
pm.setSort(sort);
pageable.setPage(pm);
//拼装关联信息
LookupOperation lookupOperation = LookupOperation.newLookup(). from("dogData"). //关联表名
localField("_id"). //关联字段
foreignField("manId").//主表关联字段对应的次表字段
as("dogs");//查询结果集合名
//拼装具体查询信息
//次表
Criteria ordercri = Criteria.where("dogs").not().size(0);//只查询有宠物的人
ordercri.and("age").gte(1).lte(5);//只查询1岁到5岁的宠物
AggregationOperation match = Aggregation.match(ordercri);
//主表
Criteria qqq=Criteria.where("name").regex("文");//只查询名字中带有文的人
AggregationOperation match1= Aggregation.match(qqq);
//分页查询
Aggregation aggregation = Aggregation.newAggregation(match1,lookupOperation,match,Aggregation.sort(pageable.getSort()),//排序 Aggregation.skip(pageable.getPageNumber()>1?(pageable.getPageNumber()-1)*pageable.getPageSize():0),//pagenumber
Aggregation.limit(pageable.getPageSize()));//pagesize
//总数查询
Aggregation counts = Aggregation.newAggregation(match1,lookupOperation,match).; int count = mongoTemplate.aggregate(counts, "manEntry", BasicDBObject.class).getMappedResults().size(); List<BasicDBObject> results = mongoTemplate.aggregate(aggregation, "manEntry", BasicDBObject.class).getMappedResults(); //查询出的结果集为BasicDBObject类型
//解析过程
for (BasicDBObject b :results ) {
//转化为jsonobject对象
JSONObject jsonObject = new JSONObject(b);
String id = jsonObject.get("id").toString();
Integer age = ((int) jsonObject.get("age"));
String remark = jsonObject.get("remark").toString();
//转化为jsonarray
JSONArray dogs = jsonObject.getJSONArray("dogs");
if (dogs.size() > 0) {
for (int i = 0; i < dogs.size(); i++) {
JSONObject job = dogs.getJSONObject(i);
String dogId = job.get("id").toString();
String manId = job.get("manId").toString();
}
}
}
}
可参考网址:https://blog.csdn.net/weixin_39804646/article/details/82155898#commentBox
SpringBoot集成MongoDB的更多相关文章
- springboot集成mongoDB 异常认证
1.springboot连接mongoDB 出现异常认证 异常详情: com.mongodb.MongoSecurityException: Exception authenticating Mong ...
- SpringBoot集成MongoDB之导入导出和模板下载
前言 自己很对自己在项目中集成MongoDb做的导入导出以及模板下载的方法总结如下,有不到之处敬请批评指正! 1.pom.xml依赖引入 <!-- excel导入导出 --> <de ...
- springboot 集成mongodb
环境依赖 在pom文件引入spring-boot-starter-data-mongodb依赖: <dependency> <groupId>org.springframewo ...
- SpringBoot 集成mongodb(1)单数据源配置
新项目要用到mongodb,于是在个人电脑上的虚拟环境linux上安装了下mongodb,练习熟悉下. 1.虚拟机上启动mongodb. 首先查看虚拟机ip地址,忘了哈~~ 命令行>ifconf ...
- springboot集成mongoDB简易使用
1.首先是添加Spring Data mongo的配置依赖 <dependency> <groupId>org.springframework.boot</groupId ...
- Springboot集成MongoDB实现CRUD
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- springboot集成mongoDB需要认证
报错: Mon Nov 25 01:09:48 CST 2019 There was an unexpected error (type=Internal Server Error, status=5 ...
- SpringBoot 集成mongodb(2)多数据源配置
github:https://github.com/xiaozhuanfeng/mongoProj 现MongoDB有两个数据库: pom.xml: <!-- mongodb 配置 --> ...
- springboot集成mongodb实现动态切换数据源
主要实现原理,利用spring的aop 在切入点执行db操作之前 将数据库切换: 本例子采用aop在controller进行拦截 拦截到MongoTemplate.class 切换数据源后重新放回去 ...
随机推荐
- Redis深入学习笔记(六)Redis内存分配
Redis的高效可以说是轻量级的epoll模型和基于内存的读写共同组成的,关于epoll对于以前的select或者poll的性能优势这里不做介绍,本篇主要介绍领一个重点,Redis的内存分配原理. 获 ...
- English 翻译到Vyeshal的软件
我或许可以做一个从英语到Vyeshal的翻译软件2333
- FIFO使用技巧
FPGA中,经常会用到FIFO来缓冲数据或者跨时钟传递数据. 1.Almost full & Almost empty 作为初学者,最开始使用FIFO的时候,对于它的理解,无非是配置好位宽.深 ...
- MySQL 设置cmd命令行登陆
1.MySQL自带工具的存放路径: D:\Program Files\MySQL\MySQL Server 5.6\bin 为了方便使用,我们可以将以上路径添加到系统的环境变量path中 如果你不放, ...
- C#压缩文件,C#压缩文件夹,C#获取文件
using System; using System.Data; using System.Configuration; using System.Collections.Generic; using ...
- ASP.NET MVC 3 Application Upgrader
ASP.NET MVC 3 Application Upgrader: http://aspnet.codeplex.com/releases/view/59008
- MSSQL 表修复语句
一早发现C盘爆满了,查询了下发现是mssql下面占用了几十G的log以及mdmp文件 一般发现这种文件就是代表着数据库出问题了. 检查数据库,发现某个数据库有问题,(回想起来前天做了一个操作,可能有问 ...
- NetworkStream介绍说明
如果服务器和客户端之间基于TCP连接的,他们之间能够依靠一个稳定的字节流进行相互传输信息,这也是NetworkStream的最关键的作用,有了这个神奇的协议,NetWorkStream便能向其他流一样 ...
- C语言数据结构_严蔚敏+吴伟民 课本源码
http://www.cnblogs.com/kangjianwei101/category/791617.html
- EF.Mysql在codefirst模式下调用存储过程,和再DbFirst模式下的调用
List<GetUserUpCrmList_Result> r = null; using (var context = new HimallContext()) { var parame ...