- mongodb-driver
mongodb-driver 是mongodb 官方推出的Java连接MongoDB的驱动包,相当于JDBC驱动。
该包操作mongodb非常的不友好,这里只提一下有这个技术,感兴趣的可以自己看菜鸟教程学习一下。 - SpringDataMongoDB
SpringDataMongoDB是SpringData家族成员之一,吊炸天的MongoDB持久层框架,底层封装了mongodb-driver。
下面使用 mongodb-driver来操作MongoDB。
创建一个 maven工程, 引入 mongodb-driver依赖。
<!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.7</version>
</dependency>
一、连接MongoDB
1、连接MongoDB服务
1.1 不通过认证连接MongoDB服务
MongoClient mongoClient = new MongoClient(“localhost”, 27017);
- “localhost” 表示连接的服务器地址,
- 默认端口号为 27017,可以省略 。
1.2 通过安全认证连接MongoDB服务(推荐使用)
List<ServerAddress> adds = new ArrayList<>();
// ServerAddress()两个参数分别为 服务器地址 和 端口
ServerAddress serverAddress = new ServerAddress("localhost", 27017);
adds.add(serverAddress);
List<MongoCredential> credentials = new ArrayList<>();
// MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
MongoCredential mongoCredential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());
credentials.add(mongoCredential);
// 通过连接认证获取MongoDB连接
MongoClient mongoClient = new MongoClient(adds, credentials);
1.3 将连接信息封装成工具类
新建 MongoDBUtil类。通过安全认证连接 MongoDB服务。
import com.mongodb.*;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;
import org.bson.Document;
import java.util.ArrayList;
import java.util.List;
public class MongoDBUtil {
private static MongoClient mongoClient;
static {
System.out.println("===============MongoDBUtil初始化========================");
List<ServerAddress> adds = new ArrayList<>();
//ServerAddress()两个参数分别为 服务器地址 和 端口
ServerAddress serverAddress = new ServerAddress("localhost", 27017);
adds.add(serverAddress);
List<MongoCredential> credentials = new ArrayList<>();
//MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
MongoCredential mongoCredential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());
credentials.add(mongoCredential);
//通过连接认证获取MongoDB连接
mongoClient = new MongoClient(adds, credentials);
System.out.println("==========Connect to MongoDB successfully================");
}
public static MongoClient getMongoClient() {
return mongoClient;
}
}
2、 数据库操作
2.1 获取所有数据库
@Test
public void testGetDBS() {
MongoIterable<String> dbNames = MongoDBUtil.getMongoClient().listDatabaseNames();
for (String db : dbNames) {
System.out.println(db);
}
}
2.2 获取指定数据库 - 若DB不存在则创建
@Test
public void testGetDB() {
MongoDatabase db3 = MongoDBUtil.getMongoClient().getDatabase("m_db3");
System.out.println(db3); //com.mongodb.client.internal.MongoDatabaseImpl@1d9b7cce
}
3、获取数据库中的集合
3.1 获取某数据库中的所有集合
@Test
public void testGetDBAllCollection() {
MongoDatabase db1 = MongoDBUtil.getMongoClient().getDatabase("m_db1");
MongoIterable<String> collNames = db1.listCollectionNames();
for (String collName : collNames) {
System.out.println(collName);
}
}
3.2 获取某数据库中的某个集合
@Test
public void testGetCollection() {
MongoDatabase db1 = MongoDBUtil.getMongoClient().getDatabase("m_db1");
MongoCollection<Document> coll3 = db1.getCollection("coll3");
System.out.println(coll3.countDocuments()); //7
}
3.3 创建集合
db1.createCollection(“coll4”);
二、对数据库进行CRUD
1、插入操作
1.1 插入一个文档
@Test
public void test() {
// 创建一个数据库
MongoDatabase db3 = MongoDBUtil.getMongoClient().getDatabase("m_db3");
// 创建一个集合,获取该集合
db3.createCollection("coll1");
MongoCollection<Document> coll1 = db3.getCollection("coll1");
// 创建文档
Map<String, Object> map = new HashMap<>();
map.put("_id", "11");
map.put("name", "zhaoyun");
map.put("age", 18);
map.put("sex", 1);
Document document = new Document(map);
//向集合中插入文档
coll1.insertOne(document);
System.out.println(coll1.countDocuments()); //1
}
1.2 插入多个文档
@Test
public void test() {
MongoDatabase db3 = MongoDBUtil.getMongoClient().getDatabase("m_db3");
MongoCollection<Document> coll1 = db3.getCollection("coll1");
//要插入的文档
List<Document> documents = new ArrayList<>();
for(int i = 2; i <= 4; i++) {
Document document = new Document();
document.append("_id", i * 11 + "");
document.append("name", "luna" + i);
document.append("age", i + 10);
document.append("sex", 0);
documents.add(document);
}
//向集合中插入文档
coll1.insertMany(documents);
System.out.println(coll1.countDocuments()); //4
}
2、常见查询操作
2.1 查询集合中所有记录
@Test
public void test() {
MongoDatabase db3 = MongoDBUtil.getMongoClient().getDatabase("m_db3");
MongoCollection<Document> coll1 = db3.getCollection("coll1");
FindIterable<Document> documents = coll1.find();
for (Document document : documents) {
System.out.println(document);
}
}
2.2 查询集合中所有总数
System.out.println(coll1.countDocuments()); //4
我们还可以指定查询过滤器com.mongodb.client.model.Filters
查询
2.3 查询集合中某个记录
//指定查询过滤器
Bson filter = Filters.eq("_id", "22");
FindIterable<Document> documents = coll1.find(filter);
System.out.println(documents.first()); // Document{{_id=22, name=luna2, age=12, sex=0}}
2.4 查询集合中某个记录是否存在
MongoCollection<Document> coll1 = db3.getCollection("coll1");
// 指定查询过滤器
Bson filter = Filters.eq("_id", "444");
long countDocuments = coll1.countDocuments(filter); //0
if (countDocuments == 0) {
System.out.println(false);
} else {
System.out.println(true);
}
2.5 查询集合中某些记录总数
查询过滤器com.mongodb.client.model.Filters
的更多用法,自行了解。
@Test
public void test() {
MongoDatabase db3 = MongoDBUtil.getMongoClient().getDatabase("m_db3");
MongoCollection<Document> coll1 = db3.getCollection("coll1");
//指定查询过滤器
Bson filter = Filters.or(
Filters.eq("sex", 1),
Filters.and(Filters.eq("sex", 0), Filters.gte("age", 13)));
FindIterable<Document> documents = coll1.find(filter);
for (Document document : documents) {
System.out.println(document);
}
}
3、更新操作
这里都使用局部修改。
注意
:如果修改的数据和数据库中的字段数据一致,则不会修改,即getModifiedCount不会+1.
3.1 更新集合中的一条记录
@Test
public void test() {
MongoDatabase db3 = MongoDBUtil.getMongoClient().getDatabase("m_db3");
MongoCollection<Document> coll1 = db3.getCollection("coll1");
// 指定查询过滤器
Bson filter = Filters.eq("_id", "44");
//指定修改的更新文档
Document updateDocument = new Document("$set", new Document("age", 100).append("name", "安琪拉"));
UpdateResult updateResult = coll1.updateOne(filter, updateDocument);
if (updateResult.getModifiedCount() == 0) {
System.out.println(false);
} else {
System.out.println(true);
System.out.println(updateResult.getModifiedCount()); //1
}
}
3.2 更新集合中的多条记录
// 指定查询过滤器
Bson filter = Filters.eq("sex", 0);
//指定修改的更新文档
Document updateDocument = new Document("$set", new Document("age", 99).append("name", "xiaobing"));
UpdateResult updateResult = coll1.updateMany(filter, updateDocument);
if (updateResult.getModifiedCount() == 0) {
System.out.println(false);
} else {
System.out.println(true);
System.out.println(updateResult.getModifiedCount()); //3
}
4、删除操作
@Test
public void test() {
MongoDatabase db3 = MongoDBUtil.getMongoClient().getDatabase("m_db3");
MongoCollection<Document> coll1 = db3.getCollection("coll1");
// 指定查询过滤器
Bson filter = Filters.eq("sex", 0);
DeleteResult deleteResult = coll1.deleteOne(filter);
// DeleteResult deleteResult = coll1.deleteMany(filter);
if (deleteResult.getDeletedCount() == 0) {
System.out.println(false);
} else {
System.out.println(true);
System.out.println(deleteResult.getDeletedCount()); //1
}
}
java 操作MongoDB,就搞定了,举一反三,关于过滤器和其他操作方法的更多使用也就ok。
Stay Hungry, Stay Foolish. 求知若饥,虚心若愚。