java 实现mongoDB 增加,删除,修改,查看,多条件查询,聚合查询,分组查询(史上最全)
首先idea创建一手springboot项目 引入如下依赖
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.8.0</version>
</dependency>
下面是具体的java对mongod的操作。
需要将
data = mongod.getDatabase("runoob");
获取的数据库换成自己的数据库,端口为默认端口
这里我写了一个
@BeforeEach
@AfterEach
两个注解:分别是在执行测试类之前执行和在测试类执行之后执行。我使用的是springboot2,如果是springboot1需要将这两个注解修改为
@Before
@After
import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.client.*;
import com.mongodb.client.model.Aggregates;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.InsertOneModel;
import com.mongodb.client.model.UpdateOneModel;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest; import javax.print.Doc;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern; @SpringBootTest
public class MongodJointTest {
private MongoClient mongod;
private MongoDatabase data; @BeforeEach
public void mongoJoint() {
mongod = new MongoClient("localhost", 27017);
data = mongod.getDatabase("runoob");
} @AfterEach
public void closeMongo() {
mongod.close();
} //单条插入
@Test
public void insertMongo() {
MongoCollection<Document> ab1 = data.getCollection("ab1");
Document c = new Document();
c.append("title", "s标题qq");
c.append("encode", 22.0);
ab1.insertOne(c);
System.out.println("数据插入成功");
} //多条插入
@Test
public void insertManyMongo() {
MongoCollection<Document> ab1 = data.getCollection("ab1");
Document c0 = new Document();
c0.append("title", "标题0");
c0.append("encode", 21.0);
Document c1 = new Document();
c1.append("title", "标题1");
c1.append("encode", 22.0);
Document c2 = new Document();
c2.append("title", "标题2");
c2.append("encode", 23.0);
List<Document> c = Arrays.asList(c0, c1, c2);
ab1.insertMany(c);
System.out.println("数据插入成功");
} //删除
@Test
public void delMongod() {
MongoCollection<Document> ab1 = data.getCollection("ab1");
Document c = new Document();
c.append("title", "a");
ab1.deleteOne(c);
//两种写法
//ab1.deleteOne(Filters.eq("title","b"));
} //修改信息
@Test
public void upMongod() {
MongoCollection<Document> ab1 = data.getCollection("ab1");
ab1.updateOne(Filters.eq("title", "标题"), new Document("$set", new Document("encode", 21.0)));
} //批量插入,修改,(也可删除)
@Test
public void sumMongod() {
MongoCollection<Document> ab1 = data.getCollection("ab1");
ab1.bulkWrite(Arrays.asList(new InsertOneModel<>(new Document("title", "p标题1")),
new InsertOneModel<>(new Document("title", "p标题2")),
new InsertOneModel<>(new Document("title", "p标题3")),
new UpdateOneModel<>(new Document("title", "p标题1"), new Document("$set", new Document("title", "p批量修改标题")))
));
} //查询
@Test
public void sendMongod() {
MongoCollection<Document> ab1 = data.getCollection("ab1");
FindIterable<Document> documents = ab1.find().limit(3).skip(2);
for (Document doc : documents) {
System.out.println(doc.get("_id") + " " + doc.get("title") + " " + doc.get("encode"));
}
} //排序
@Test
public void sendSortMongod() {
MongoCollection<Document> ab1 = data.getCollection("ab1");
Document c = new Document();
//c.append("encode",1);
c.append("encode", -1);
FindIterable<Document> documents = ab1.find().sort(c);
for (Document doc : documents) {
System.out.println(doc.get("_id") + " " + doc.get("title") + " " + doc.get("encode"));
}
} //条件查询
@Test
public void conditionMongod() {
MongoCollection<Document> ab1 = data.getCollection("ab1");
FindIterable<Document> d = ab1.find(Filters.lt("encode", 20));
// FindIterable<Document> d = ab1.find(Filters.lte("encode",20));
// FindIterable<Document> d = ab1.find(Filters.gt("encode",20));
// FindIterable<Document> d = ab1.find(Filters.gte("encode",20));
// FindIterable<Document> d = ab1.find(Filters.ne("encode",20));
for (Document doc : d) {
System.out.println(doc.get("_id") + " " + doc.get("title") + " " + doc.get("encode"));
}
} //条件查询
@Test
public void conditionMongod1() {
MongoCollection<Document> ab1 = data.getCollection("ab1");
Bson where = Filters.and(Filters.gt("encode", 20), Filters.eq("title", "标题"));
FindIterable<Document> d = ab1.find(where);
for (Document doc : d) {
System.out.println(doc.get("_id") + " " + doc.get("title") + " " + doc.get("encode"));
}
} //查询一张表中的数据条数
@Test
public void countMongod() {
MongoCollection<Document> collection = data.getCollection("ab1");
FindIterable<Document> ab1 = collection.find();
int i = 0;
for (Document doc : ab1) {
i++;
}
System.out.println(i);
} //从第一条数据开是查询出前五条数据
@Test
public void first5MongodToTitle() {
MongoCollection<Document> ab1 = data.getCollection("ab1");
FindIterable<Document> skip = ab1.find().limit(5).skip(0);
for (Document doc : skip) {
System.out.println(doc.get("title"));
}
} //查询等于18的数据
@Test
public void encodeEq18Mongod() {
MongoCollection<Document> ab1 = data.getCollection("ab1");
FindIterable<Document> encode = ab1.find(Filters.eq("encode", 18));
for (Document doc : encode) {
System.out.println(doc.get("title"));
}
} //查询大于等于18的数据
@Test
public void encodeGte18Mongod() {
MongoCollection<Document> ab1 = data.getCollection("ab1");
FindIterable<Document> encode = ab1.find(Filters.gte("encode", 18));
for (Document doc : encode) {
System.out.println(doc.get("title"));
}
} //查询18到22之间的数据
@Test
public void encodeGte18Between22Mongod() {
MongoCollection<Document> ab1 = data.getCollection("ab1");
FindIterable<Document> encode = ab1.find(Filters.and(Filters.gt("encode", 18), Filters.lt("encode", 22)));
for (Document doc : encode) {
System.out.println(doc.get("title"));
}
} //根据标题查询价格
@Test
public void getencodeTotitleMongod() {
MongoCollection<Document> ab1 = data.getCollection("ab1");
FindIterable<Document> documents = ab1.find(Filters.eq("title", "标题1"));
for (Document document : documents) {
System.out.println(document.get("encode"));
}
} //模糊查询
@Test
public void LikeMongod() {
MongoCollection<Document> ab1 = data.getCollection("ab1");
//固定查询
// Pattern pattern = Pattern.compile("^标题0$", Pattern.CASE_INSENSITIVE);
//包含查询
// Pattern pattern = Pattern.compile("^.*标.*$", Pattern.CASE_INSENSITIVE);
//左固定
// Pattern pattern = Pattern.compile("^标题.*$", Pattern.CASE_INSENSITIVE);
//右固定
Pattern pattern = Pattern.compile("^.*标题$", Pattern.CASE_INSENSITIVE); BasicDBObject obj = new BasicDBObject();
obj.put("title", pattern);
FindIterable<Document> documents = ab1.find(obj);
for (Document document : documents) {
System.out.println(document.get("encode"));
}
} //聚合查询
@Test
public void groupMongod() {
MongoCollection<Document> collection = data.getCollection("ab1");
//对encode的数量进行分组,并且统计出个数
Document doc = new Document();
doc.append("_id", "$encode");
doc.append("count", new Document("$sum", 1));
//查找encode字段中数量大于18的
Document matchDoc = new Document();
matchDoc.put("_id", new Document("$gt", 18.0));
Document group = new Document("$group", doc);
Document match = new Document("$match", matchDoc);
//根据encode字段进行降序排序
Document sort = new Document("$sort", new Document("_id", 1));
//将筛选条件添加到文本集合中
List<Document> doclist = new ArrayList<Document>();
doclist.add(group);
doclist.add(match);
doclist.add(sort);
//聚合查询并输出
AggregateIterable<Document> aggregate = collection.aggregate(doclist);
MongoCursor<Document> iterator = aggregate.iterator();
while (iterator.hasNext()) {
Document next = iterator.next();
double encode = next.getDouble("_id");
int count = next.getInteger("count", 0);
System.out.println(encode + " " + count);
}
} //在mongod控制台下执行下面三句命令
/*db.test1.insert([{"title":"java开发手册","author":"孤尽","jobnum":"001"},{"title":"mongod由浅入深","author":"凉风","jobnum":"002"}])
db.test2.insert([{"jobtitle":"java工程师","jobnum":"001"},{"jobtitle":"数据库工程师","jobnum":"002"}])
db.test3.insert([{"depart":"开发1部","jobnum":"001"},{"depart":"开发2部","jobnum":"002"}])*/ //三表带筛选条件关联查询 关键字:lookup
@Test
public void lookupMongod() {
MongoCollection<Document> test1 = data.getCollection("test1"); List<Bson> aggregateList = new ArrayList<>(1);
aggregateList.add(Aggregates.lookup("test2", "jobnum", "jobnum", "result"));
aggregateList.add(Aggregates.match(Filters.ne("result", new ArrayList<String>(0)))); aggregateList.add(Aggregates.lookup("test3", "jobnum", "jobnum", "results"));
aggregateList.add(Aggregates.match(Filters.ne("results", new ArrayList<String>(0)))); aggregateList.add(Aggregates.match(Filters.eq("jobnum", "002"))); AggregateIterable<Document> aggregateIterable = test1.aggregate(aggregateList);
//对应得到的json结果参考下方
for (Document document : aggregateIterable) {
Object result = document.get("result");
String[] split = result.toString().split(",");
System.out.println(split[1].substring(split[1].indexOf("=") + 1)); Object results = document.get("results");
String[] splits = results.toString().split(",");
System.out.println(splits[1].substring(splits[1].indexOf("=") + 1));
} } // { "_id" : { "$oid" : "5eba18b5108d9caa7dba842a" },
// "title" : "java开发手册",
// "author" : "孤尽",
// "jobnum" : "001",
// "result" : [{
// "_id" : { "$oid" : "5eba1aa2108d9caa7dba8430" },
// "jobtitle" : "java工程师",
// "jobnum" : "001"
// }],
// "results" : [{
// "_id" : { "$oid" : "5eba3333108d9caa7dba8432" },
// "depart" : "开发1部",
// "jobnum" : "001"
// }]
// } }
java 实现mongoDB 增加,删除,修改,查看,多条件查询,聚合查询,分组查询(史上最全)的更多相关文章
- [JavaWeb基础] 004.用JSP + SERVLET 进行简单的增加删除修改
上一次的文章,我们讲解了如何用JAVA访问MySql数据库,对数据进行增加删除修改查询.那么这次我们把具体的页面的数据库操作结合在一起,进行一次简单的学生信息操作案例. 首先我们创建一个专门用于学生管 ...
- Nodejs之MEAN栈开发(九)---- 用户评论的增加/删除/修改
由于工作中做实时通信的项目,需要用到Nodejs做通讯转接功能,刚开始接触,很多都不懂,于是我和同事就准备去学习nodejs,结合nodejs之MEAN栈实战书籍<Getting.MEAN.wi ...
- 在Javascript操作JSON对象,增加 删除 修改
在Javascript操作JSON对象,增加删除修改全有的,详情见代码 <script type="text/javascript"> var jsonObj2 = { ...
- AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层
AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层 AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层我理解的图层的作用大概是把 ...
- Java基础面试题(史上最全、持续更新、吐血推荐)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- 史上最全阿里 Java 面试题总结
以下为大家整理了阿里巴巴史上最全的 Java 面试题,涉及大量 Java 面试知识点和相关试题. JAVA基础 JAVA中的几种基本数据类型是什么,各自占用多少字节. String类能被继承吗,为什么 ...
- 史上最全的 Java 新手问题汇总
史上最全的 Java 新手问题汇总 Java是目前最流行的编程语言之一——它可以用来编写Windows程序或者是Web应用,移动应用,网络程序,消费电子产品,机顶盒设备,它无处不在. 有超过30亿 ...
- 史上最全的java随机数生成算法分享(转)
这篇文章主要介绍了史上最全的java随机数生成算法,我分享一个最全的随机数的生成算法,最代码的找回密码的随机数就是用的这个方法 String password = RandomUtil.generat ...
- 史上最全的Java高级技术点,全是Java高级进阶技术,几乎包含了Java后端的所有知识点
史上最全的Java高级技术点,全是Java高级进阶技术,几乎包含了Java后端的所有知识点 1
- 史上最全Java面试题(带全部答案)
今天要谈的主题是关于求职,求职是在每个技术人员的生涯中都要经历多次.对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,有一份全面细致面试题将帮助我们减少许多麻烦.在跳槽季来临之前,特地做这 ...
随机推荐
- 关于JS垃圾回收机制
一.垃圾回收机制的必要性 由于字符串.对象和数组没有固定大小,所以当它们的大小已知时,才能对它们进行动态的存储分配.JavaScript程序每次创建字符串.数组或对象时,解释器都必须分配内存来存储那个 ...
- XML外部实体注入[转载]
前言 对于xxe,深入的太少,一般做题也是复制payload再修改,没有了解过内部的结构规范等.这里转载了一篇先知社区的文章,排版了一下适合博客样式.文章总结的很好,结合了很多篇的博客文章,看完也是对 ...
- MVC-过滤器-异常处理
通常异常处理是用try{ }catch{ },导致代码重复冗余. 利用特性处理demo 若action中已经包含try catch 则是被异常处理过,则不会被上面异常捕获到. 不管是视图,还是调用的d ...
- 博云DevOps 3.0重大升级 | 可用性大幅提升、自研需求管理&自定义工作流上线,满足客户多样化需求
DevOps能够为企业带来更高的部署频率.更短的交付周期与更快的客户响应速度.标准化.规范化的管理流程,可视化和数字化的研发进度管理和可追溯的版本也为企业带来的了更多的价值.引入DevOps成为企业实 ...
- Java 多线程 -- volatile 山寨版的synchronized
在 多线程中,每个线程会把数据从主内存中拷贝到自己的工作内存中,当线程完成计算后,再把工作内存的数据更新到主内存中,或者当主内存主数据有更新是,线程会去主内存取最新数据.但是,当线程特别忙时,就不会去 ...
- 基于layui,Jquery 表格动态编辑 设置 编辑值为 int 或者 double 类型及默认值
首先先推荐大家在看这篇笔记时,阅读过我写的这篇 Layui表格编辑[不依赖Layui的动态table加载] 阅读过上面那篇笔记之后呢,才能更好的理解我现在所要说的这个东西 接下来废话不多说,上代码. ...
- Caused by: java.lang.ClassCastException: class java.lang.Double cannot be cast to class org.apache.hadoop.io.WritableComparable
错误: Caused by: java.lang.ClassCastException: class java.lang.Double cannot be cast to class org.apac ...
- 深入理解PHP之数组(遍历顺序)
作者: Laruence 本文地址: http://www.laruence.com/2009/08/23/1065.html 转载请注明出处 经常会有人问我, PHP的数组, 如果用foreach来 ...
- python学习21之高级特性
'''''''''1.切片(1)谁可以进行切片操作?——列表,元组,字符串(2)切片有以下几种操作'''#[a:b]:取从下标为a的元素开始,到下标为b-1的元素结束L=['aa','bb','cc' ...
- C/C++ 程序执行时间
C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t.在MSDN中,查得对clock函数定义如下: clock_t clock( void ); 这个函数返回从“开启这个程序进 ...