Mongo-Driver
- Mongo支持多种语言,mongo-driver是mongo官方推出的java连接mongoDB的驱动包,相当于JDBC驱动,通过mongo-driver完成对MongoDB的操作
- Mongo java快速开始的官网在此 官网的文档虽然很乱七八糟(一篇文档里有太多链接,看着看着就迷失了,但代码写的很清晰),但好歹是官方文档,而且有很多更新的新的API。(唉,要好好学习看官方文档啊,被各种外部的解释文档宠坏了)
开干
话不多说,我们直接开始操作
创建一个maven工程,pom文件中添加依赖
我看好多人给的是添加 mongo-driver的依赖,但官方给的是添加mongo-driver-sync的依赖,所以我们按官方的来
然后因为我用测试代码来进行演示,所以再引入一个junit的包
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.5.1</version>
</dependency>
编写crud代码
就照着官方文档写就成,还算好理解,懒得分每一个部分了,全部在这里了
package com.dean;
import com.mongodb.client.*;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Projections;
import com.mongodb.client.model.Sorts;
import com.mongodb.client.model.Updates;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class MongoTest {
private MongoClient client = null;
private MongoCollection<Document> collection = null;
//测试连接数据库
@Before
public void connect() {
//mongo地址
String uri = "mongodb://192.168.0.108:27017";
//获取到mongo 客户端
client = MongoClients.create(uri);
//根据数据库名称 链接到数据库
MongoDatabase database = client.getDatabase("common_test");
//通过数据库 找到数据库下的集合(即表)
collection = database.getCollection("comment");
System.out.println("链接Mongo成功");
}
//获取表下的所有数据
@Test
public void findAll() {
//通过集合,获得表下的所有数据
FindIterable<Document> documents = collection.find();
//通过迭代器 遍历文档
MongoCursor<Document> iterator = documents.iterator();
while (iterator.hasNext()) {
Document document = iterator.next();
System.out.println(document);
}
}
//向表中插入数据
@Test
public void insertOne() {
//可以看一下Document对象 实际是个LinkedMap
Document doc = new Document();
doc.put("_id", "5");
doc.put("userId", "006");
doc.put("content", "每次都不知道写什么");
doc.put("thumbUp", 200.0);
doc.put("testField", "测试能不能多放一个没定义过的字段");
collection.insertOne(doc);
System.out.println("插入一条数据成功");
}
//修改数据
@Test
public void update() {
//根据条件选择修改的数据
Bson filter = Filters.eq("userId", "004");
Bson updates = Updates.combine(
Updates.set("content", "这是一个更新字段"),
Updates.set("thumbUp", 200000.0),
Updates.currentTimestamp("lastUpdated"));
//ps:updateOne(匹配到多条数据,也只修改一条数据)
//updateMany(匹配到多条数据,那么所有数据都会被更新)
UpdateResult updateResult = collection.updateMany(filter, updates);
System.out.println(updateResult.getModifiedCount() + "条数据更新成功");
}
//删除数据
@Test
public void deleteDocument() {
//构造要删除的数据的条件
Bson filter = Filters.eq("_id", "5");
DeleteResult deleteResult = collection.deleteOne(filter);
System.out.println(deleteResult.getDeletedCount() + "条数据被删除");
}
//多条件查询,并限制返回的字段
@Test
public void findByCondition() {
//选择需要返回的字段
Bson fields = Projections.fields(
Projections.include("userId", "content", "thumbUp"),
Projections.excludeId()
);
//查询条件
Bson filter_one = Filters.gt("thumbUp", 2024.0);
Bson filter_two = Filters.lte("thumbUp", 200000.0);
List<Bson> filters = new ArrayList<>();
filters.add(filter_one);
filters.add(filter_two);
Bson filter = Filters.and(filters);
//顺便使用一下count函数
long count = collection.countDocuments(filter);
System.out.println(count + "条数据被匹配到");
MongoCursor<Document> cursor = collection.find(filter)
.projection(fields)
.sort(Sorts.descending("thumbUp"))
.iterator();
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
cursor.close();
}
//关闭Mongo连接,释放资源
@After
public void close() {
client.close();
System.out.println("Mongo连接已释放");
}
}
以上代码本人已经亲自试过了,没半点毛病,所以就不贴截图了,唯一需要注意的点是:把你的表名和数据库名称写对!!!
以上,累了。