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面试题(带全部答案)
今天要谈的主题是关于求职,求职是在每个技术人员的生涯中都要经历多次.对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,有一份全面细致面试题将帮助我们减少许多麻烦.在跳槽季来临之前,特地做这 ...
随机推荐
- VMware15 安装Mac 10.14系统/苹果系统
安装环境 Windows专业版 VMware Workstation Pro 15 所需资源 VMware Workstation Pro 15.0.0 Build 10134415 官网下载地址:h ...
- [PHP] 获取IP 和JS获取IP和地址
通过js获取 服务器 ip 服务器端口 服务器地址 var address=window.location.href; thisDLoc = document.location; var hostpo ...
- mysql参数max_binlog_cache_size设置不当引发的血案
日常运维中的坑真是防不胜防,不一小心就遇到别人给你挖的坑.最近又遇到经验不足的DBA不知道从哪拷贝的配置文件(据说是当时参加某培训机构视频培训是资料里的模板,真的是误人子弟呀),其中把max_binl ...
- Django中MySQL事务的使用
Django中事物的使用 from django.db import transaction @transaction.atomic通过transaction的@transaction.atomic装 ...
- .NET Core 使用MediatR CQRS模式
前言 CQRS(Command Query Responsibility Segregation)命令查询职责分离模式,它主要从我们业务系统中进行分离出我们(Command 增.删.改)和(Query ...
- 在php中如何实现cookie即时生效,不用刷新就可以使用
参考:https://www.jianshu.com/p/0468ef5dbf4d 今天在用php设置cookie的时候,发现cookie如果只是赋值一次的话,要手动刷新一下浏览器才能把数据及时更新, ...
- 最新版navicat 12.1 破解(Keygen注册机)
最新注册机链接:https://pan.baidu.com/s/1fFCRkkXMzk6CFpbttCDr7w 提取码:40xo 1.下载安装Navicat 在Navicat关闭的情况下运行注册机 ...
- KVM虚拟化平台环境部署
一:安装依赖包 二:配置网卡 三:配置环境 实验环境: KVM01 192.168.200.10 关闭防火墙及相关的安全机制 [root@KVM01 ~]# systemctl stop fire ...
- 【Linux常见命令】tar命令
[独立命令,只能用其中一个,和别的命令连用]这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个. -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末 ...
- 标准库os
os模块 提供对操作系统进行调用的接口 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 os ...