首先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. mysql 更改默认字符集

    mysql 默认字符集概述 首先,MySQL的字符集问题主要是两个概念: haracter Sets Collations 前者是字符内容及编码,后者是对前者进行比较操作的一些规则.这两个参数集可以在 ...

  2. Java中常量的概念

    常量:在程序执行过程中,其值不发生改变的量.分类:A:字面值常量B:自定义常量字面值常量A:字符串常量(用“”括起来的内容).举例:"hello"B:整数常量 (所有的整数)举例: ...

  3. 通用Mapper使用

    通用Mapper介绍 产生背景 使用Mybatis的开发者大多会因为繁多的XML映射配置而头痛不已

  4. c++动态数组的使用

    在c++中,有的时候会遇到变长的数组(不管是一维的还是二维的),这个时候就需要用到动态数组了,并且要用new和delete两个操作符,这俩操作符一般成对使用. 先说一维的动态数组吧,直接上代码 #in ...

  5. Jmeter:运行报:Error occurred starting thread group :线程组, error message:Invalid duration 0 set in Thread Group:线程组, see log file for more details

    最近在用jmeter做压测,上周五压测的脚本,今天早晨结束后. 点击同样的脚本,运行就报Error occurred starting thread group :线程组, error message ...

  6. Linux安全实验缓冲区溢出

    缓冲区溢出实验: 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现是由于数据缓冲器和返回地址的暂时关 ...

  7. [Qt]执行cmd命令

    要加 /c 参数 QProcess p; p.start("cmd", QStringList()<<"/c"<<"ping ...

  8. IDEA 之 常用快捷键

    1. 编辑 No. 快捷键 功能描述 01 Ctrl+Space 补全代码 02 Ctrl+Shift+Space 补全代码,添加分号结束符 03 Ctrl+q 展示某个类或方法的API说明文档 04 ...

  9. 蚂蚁金服合作的RISE实验室到底有多牛?

    近日,蚂蚁金服与美国加州伯克利大学近期新成立的RISE实验室达成合作意向.RISE实验室的前身是著名伯克利AMP实验室,主导研发了当今大数据计算领域最前沿的开源系统:Apache Spark.Apac ...

  10. USACO Training Section 1.2 [USACO1.2]回文平方数

    题目描述 回文数是指从左向右念和从右向左念都一样的数.如12321就是一个典型的回文数. 给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且 ...