首先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 增加,删除,修改,查看,多条件查询,聚合查询,分组查询(史上最全)的更多相关文章

  1. [JavaWeb基础] 004.用JSP + SERVLET 进行简单的增加删除修改

    上一次的文章,我们讲解了如何用JAVA访问MySql数据库,对数据进行增加删除修改查询.那么这次我们把具体的页面的数据库操作结合在一起,进行一次简单的学生信息操作案例. 首先我们创建一个专门用于学生管 ...

  2. Nodejs之MEAN栈开发(九)---- 用户评论的增加/删除/修改

    由于工作中做实时通信的项目,需要用到Nodejs做通讯转接功能,刚开始接触,很多都不懂,于是我和同事就准备去学习nodejs,结合nodejs之MEAN栈实战书籍<Getting.MEAN.wi ...

  3. 在Javascript操作JSON对象,增加 删除 修改

    在Javascript操作JSON对象,增加删除修改全有的,详情见代码 <script type="text/javascript"> var jsonObj2 = { ...

  4. AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层

    AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层 AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层我理解的图层的作用大概是把 ...

  5. Java基础面试题(史上最全、持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  6. 史上最全阿里 Java 面试题总结

    以下为大家整理了阿里巴巴史上最全的 Java 面试题,涉及大量 Java 面试知识点和相关试题. JAVA基础 JAVA中的几种基本数据类型是什么,各自占用多少字节. String类能被继承吗,为什么 ...

  7. 史上最全的 Java 新手问题汇总

    史上最全的 Java 新手问题汇总   Java是目前最流行的编程语言之一——它可以用来编写Windows程序或者是Web应用,移动应用,网络程序,消费电子产品,机顶盒设备,它无处不在. 有超过30亿 ...

  8. 史上最全的java随机数生成算法分享(转)

    这篇文章主要介绍了史上最全的java随机数生成算法,我分享一个最全的随机数的生成算法,最代码的找回密码的随机数就是用的这个方法 String password = RandomUtil.generat ...

  9. 史上最全的Java高级技术点,全是Java高级进阶技术,几乎包含了Java后端的所有知识点

    史上最全的Java高级技术点,全是Java高级进阶技术,几乎包含了Java后端的所有知识点 1

  10. 史上最全Java面试题(带全部答案)

    今天要谈的主题是关于求职,求职是在每个技术人员的生涯中都要经历多次.对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,有一份全面细致面试题将帮助我们减少许多麻烦.在跳槽季来临之前,特地做这 ...

随机推荐

  1. Springboot:配置文件位置以及多环境配置(六)

    配置文件位置 Springboot配置文件可以加载以下四个位置: file:./config/ #第一加载位置 file:./ #第二加载位置 classpath:/config/ #第三加载位置 c ...

  2. SpringCloud-Hystrix 服务降级、熔断

    Hystrix 是什么? Hystrix 是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时.异常等,Hystrix 能够保证在一个依赖出问题的情况下 ...

  3. 分享一个404页面(猴子动态SVG图)

    说明 在CSDN看到的一个404界面,简洁大气非常棒我的个人网站已经用上了! 代码 防止原页面失效,代码 粘贴在下面 <!DOCTYPE html> <html lang=" ...

  4. thinkphp--create()方法

    1.create方法可以对POST提交的数据进行处理(通过表中的字段名称与表单提交的名称对应关系自动封装数据实例),例如user表中有一个字段名叫"username",如果表单中有 ...

  5. thinkphp5 -- _initialize()初始化控制器

    public function _initialize() { parent::_initialize(); } public function __construct() { $; parent:: ...

  6. JDK14的新特性:Lombok的终结者record

    目录 简介 新的Record类型 探讨Record的秘密 record扩展 总结 JDK 14的新特性:Lombok的终结者record 简介 自从面向对象产生之后,程序界就开始了新的变化,先是C发展 ...

  7. 非阻塞算法(Lock-Free)的实现

    目录 非阻塞的栈 非阻塞的链表 非阻塞算法(Lock-Free)的实现 上篇文章我们讲到了使用锁会带来的各种缺点,本文将会讲解如何使用非阻塞算法.非阻塞算法一般会使用CAS来协调线程的操作. 虽然非阻 ...

  8. SpringBoot 集成Swagger2自动生成文档和导出成静态文件

    目录 1. 简介 2. 集成Swagger2 2.1 导入Swagger库 2.2 配置Swagger基本信息 2.3 使用Swagger注解 2.4 文档效果图 3. 常用注解介绍 4. Swagg ...

  9. NumPy学习指南(第2版)

    第一章 NumPy快速入门 首先,我们将介绍如何在不同的操作系统中安装NumPy和相关软件,并给出使用NumPy的简单示例代码. 然后,我们将简单介绍IPython(一种交互式shell工具). 如前 ...

  10. Omnicore RPC API中文文档

    2019独角兽企业重金招聘Python工程师标准>>> OmniCore是比特币核心的一个分支,它在比特币协议之上实现了一个新的Omni协议层,用于代币发行.众售等应用,USDT就是 ...