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面试题(带全部答案)
今天要谈的主题是关于求职,求职是在每个技术人员的生涯中都要经历多次.对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,有一份全面细致面试题将帮助我们减少许多麻烦.在跳槽季来临之前,特地做这 ...
随机推荐
- testlink的api
testlink可以做很多你想象得到的事情,如API测试参数管理,Excel导入导出,快速模板创建测试用例,集成Jenkins. TestLink API第三方库: TestLink-API-Pyth ...
- Spring Boot 自定义kafka 消费者配置 ContainerFactory最佳实践
Spring Boot 自定义kafka 消费者配置 ContainerFactory最佳实践 本篇博文主要提供一个在 SpringBoot 中自定义 kafka配置的实践,想象这样一个场景:你的系统 ...
- Python flask 构建可扩展的restful ap
Flask-RESTful是flask的扩展,增加了对快速构建REST API的支持. Flask-RESTful通过最少的设置鼓励最佳的实践. pip install flask-restfulFl ...
- css3--弹性布局
来源:https://www.cnblogs.com/xuyuntao/articles/6391728.html
- (第四篇)Linux命令初识之常用系统管理命令
1.hostname [命令作用]用于显示和设置系统的主机名称(但是不会永久保存,重启后会恢复) [命令语法]hostname(选项)(参数) [常用选项] -a:显示主机别名(alias name) ...
- Spring Boot JPA中java 8 的应用
文章目录 Optional Stream API CompletableFuture Spring Boot JPA中java 8 的应用 上篇文章中我们讲到了如何在Spring Boot中使用JPA ...
- MySQL数据库入门详细笔记
ps: 中括号[]里的内容都是可以省略的,按需要添加 数据库操作 创建数据库 语法:create database [if not exists] 数据名 charset=gbk; create da ...
- 看了就会的VScode给C++的配置编译环境(Visual Studio Code)
我看了网上的大佬们配的我是在是看不懂啊?我是一个小白啊?这太难了,这阻挡不了我,想使用这很骚的IDE,于是在不断的摸索下,终于配置成功,小白们也不用慌,这次非常简单.一定可以的. 1.下载 VS Co ...
- 洛谷 2016 战略游戏(树形DP)
题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能 ...
- 【NOI Online 2020】入门组 总结&&反思
前言: 这次的NOI Online 2020 入门组我真的无力吐槽CCF的网站了,放段自己写的diss的文章,供一乐 如下:(考试后当天晚上有感而发) 今天是个好日子!!!(我都经历了什么...... ...