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 切换数据源后重新放回去 ...
随机推荐
- Git世界历险记
Git-版本管理器 Git ||属于分散型版本管理系统,是为版本管理而而设计的软件.(Linux的创始人Linus Torvalds在2005年开发了Git的原型程序,在此之前人们大多选用Subve ...
- SpringMVC Controller接收前台ajax的GET或POST请求返回各种参数
这几天写新项目遇到这个问题,看这位博主总结得不错,懒得写了,直接转!原文:http://blog.csdn.net/yixiaoping/article/details/45281721原文有些小错误 ...
- [UnityShader基础]07.MaterialPropertyDrawer
参考链接: https://blog.csdn.net/e295166319/article/details/60141677 https://docs.unity3d.com/ScriptRefer ...
- 7种清除浮动 (感觉br最好用然而我用的还是overflow)
1.clear清除浮动(添加空div法) 在浮动元素下方添加空div,并给该元素写css样式: {clear:both;height:0;overflow:hidden;} 2.方法:给浮动元素父级设 ...
- 利用SUM打java补丁
Upgrade Single JAVA Component Patch Level Using SUM Tool Hi Friends, I came across few posts/threads ...
- 【C语言基础】什么是数据类型?
基本数据类型 整数 整型 — — int ---- 4 字节 短整型 — — short int ---- 2 字节 长整型 — — long int ---- 8 字节 ...
- 如何使用cloudflare的CDN加速网站隐藏网站IP
原文:http://www.safecdn.cn/contact-zh/2018/12/cloudflare-cdn/1146.html 高防CDN:https://www.safeidc.cn/cd ...
- LeetCode 94. Binary Tree Inorder Traversal 二叉树的中序遍历 C++
Given a binary tree, return the inorder traversal of its nodes' values. Example: Input: [,,] \ / Out ...
- LeetCode 203. Remove Linked List Elements 移除链表元素 C++/Java
Remove all elements from a linked list of integers that have value val. Example: Input: ->->-& ...
- Python实现多线程调用GDAL执行正射校正
python实现多线程参考http://www.runoob.com/python/python-multithreading.html #!/usr/bin/env python # coding: ...