1. 概述
MongoDB 是一个 NoSQL 数据库,它将数据记录存储为BSON文档,并存放在集合中。我们可以拥有多个数据库,每个数据库可以包含一个或多个文档集合。
与关系型数据库不同,MongoDB 在插入文档时无需定义任何结构即可创建集合。在这个教程中,我们将学习检查集合存在的各种方法,我们将使用collectionExists
、createCollection
、listCollectionNames
和 count
方法来验证集合是否存在。
2. 数据库连接
为了访问集合中的任何数据,我们首先需要与数据库建立连接。让我们连接到本地机器上运行的 MongoDB 数据库。
2.1. 使用 MongoClient
创建连接
MongoClient
是一个 Java 类,用于与 MongoDB 实例建立连接:
MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
这里,我们连接到在本地主机默认端口 27017 运行的 MongoDB。
2.2. 连接到数据库
现在,我们将使用 MongoClient
对象访问数据库。通过 MongoClient
访问数据库有两种方法。
首先,我们将使用getDatabase
方法访问 baeldung
数据库:
MongoDatabase database = mongoClient.getDatabase("baeldung");
我们也可以使用Mongo Java驱动的getDB
方法连接到数据库:
MongoDatabase db = mongoClient.getDatabase("baeldung");
getDB
方法已弃用,因此不建议使用。
至此,我们已经使用 MongoClient
与 MongoDB 建立了连接,并进一步连接到了 baeldung
数据库。
接下来,我们将深入探讨在 MongoDB 中检查集合存在性的不同方法。
3. 使用 DB
类
MongoDB Java 驱动提供了同步和异步方法调用。为了连接到数据库,只需指定数据库名称。如果数据库不存在,MongoDB 将自动创建一个。
collectionExists
方法在新版本中不存在,因此我们可以通过调用listCollectionNames()
来检查集合是否存在:
MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
MongoDatabase db = mongoClient.getDatabase("baeldung");
String testCollectionName = "student";
System.out.println("Collection Name " + testCollectionName + " " + db.listCollectionNames().into(new ArrayList<>()).contains(testCollectionName));
这里,listCollectioNames
方法将返回所有集合,然后与所需的集合进行匹配。
MongoDB Java 驱动的 com.mongodb.DB
API 在 3.x 版本之后被弃用,但仍可访问。 因此,不建议在新项目中使用 DB
类。
4. 使用 MongoDatabase
类
com.mongodb.client.MongoDatabase
是针对 3.x 及以上版本的更新 API。与 DB
类不同,MongoDatabase
类没有提供特定的方法来检查集合是否存在。但是,我们可以使用多种方法来获取所需的结果。
4.1. 使用 createCollection
方法
createCollection
方法在 MongoDB 中创建新的集合。但我们也可利用它来检查集合是否存在:
String databaseName="baeldung";
MongoDatabase database = mongoClient.getDatabase(databaseName);
String testCollectionName = "student";
try {
database.createCollection(testCollectionName);
} catch (Exception exception) {
System.err.println("Collection:- "+testCollectionName +" already Exists");
}
上述代码将在数据库中创建名为“student”的新集合,如果它尚未存在。 如果集合已经存在,createCollection
方法将抛出异常。
这种方法不推荐,因为它会在数据库中创建一个新的集合。
4.2. 使用 listCollectionNames
方法
listCollectionNames
方法列出数据库中的所有集合名称。因此,我们可以使用这个方法解决集合存在性问题。
现在让我们看一个使用 Java 驱动代码的 listCollectionNames
方法示例:
String databaseName="baeldung";
MongoDatabase database = mongoClient.getDatabase(databaseName);
String testCollectionName = "student";
boolean collectionExists = database.listCollectionNames()
.into(new ArrayList()).contains(testCollectionName);
System.out.println("collectionExists:- " + collectionExists);
在这里,我们遍历数据库 baeldung
中的所有集合名称。对于每次出现,我们将集合的字符串名称与 testCollectionName
进行匹配。如果匹配成功,它将返回 true
,否则返回 false
。
4.3. 使用 count
方法
MongoCollection
的 count
方法计算集合中文档的数量。
作为一种替代方法,我们可以使用此方法检查集合的存在。以下是相应的 Java 代码片段:
String databaseName="baeldung";
MongoDatabase database = mongoClient.getDatabase(databaseName);
String testCollectionName = "student";
MongoCollection<Document> collection = database.getCollection(testCollectionName);
Boolean collectionExists = collection.countDocuments() > 0 ? true : false;
System.out.println("collectionExists:- " + collectionExists);
Boolean expectedStatus = false;
assertEquals(expectedStatus, collectionExists);
如果集合中没有任何数据,此方法将无法工作,因为它会返回 0,但即使集合为空,也会存在。
5. 总结
在这篇文章中,我们探讨了使用 MongoDatabase
和 DB
类方法检查集合存在性的各种方法。
简而言之,推荐使用 com.mongodb.DB
类的 collectionExists
方法以及 com.mongodb.client.MongoDatabase
类的 listCollectionNames
方法来检查集合的存在性。
如往常一样,所有示例的源代码和代码片段可在GitHub上找到。