1. Overview
1.概述
MongoDB is a NoSQL database that stores the data records as BSON documents into a collection. We can have multiple databases, and each database can have one or more collections of documents.
MongoDB是一个NoSQL数据库,它将数据记录作为BSON文档存储到一个集合。我们可以有多个数据库,而每个数据库可以有一个或多个文档集合。
Unlike relational databases, MongoDB creates the collection with the inserted document without the need for any structure definition. In this tutorial, we’ll learn various ways to check the existence of a collection. We’ll use the collectionExists, createCollection, listCollectionNames, and count method to check the collection’s existence.
与关系型数据库不同,MongoDB用插入的文档创建集合,而不需要任何结构定义。在本教程中,我们将学习各种方法来检查一个集合的存在。我们将使用collectionExists、createCollection、listCollectionNames、和 count方法来检查集合的存在。
2. Database Connectivity
2.数据库连接
In order to access any data of a collection, we first need to set up a connection with the database. Let’s connect to the MongoDB database that is running locally on our machine.
为了访问一个集合的任何数据,我们首先需要建立一个与数据库的连接。让我们连接到我们机器上本地运行的MongoDB数据库。
2.1. Create Connection Using the MongoClient
2.1.使用MongoClient创建连接
MongoClient is a Java class used to establish a connection with the MongoDB instance:
MongoClient是一个Java类,用于与MongoDB实例建立连接。
MongoClient mongoClient = new MongoClient("localhost", 27017);
Here, we are connecting to MongoDB that is running at port default port 27017 on localhost.
在这里,我们正在连接到MongoDB,该数据库运行在localhost的默认端口27017。
2.2. Connect to Database
2.2.连接到数据库
Now, let’s use the MongoClient object to access the database. There are two methods to access the database using the MongoClient.
现在,让我们使用MongoClient对象来访问数据库。有两种方法可以使用MongoClient访问数据库。
First, we’ll use the getDatabase method to access the baeldung database:
首先,我们将使用getDatabase方法来访问baeldung数据库。
MongoDatabase database = mongoClient.getDatabase("baeldung");
We can also use the getDB method of Mongo Java driver to connect to the database:
我们也可以使用Mongo Java驱动的getDB方法来连接到数据库。
DB db = mongoClient.getDB("baeldung");
The getDB method is deprecated, hence it is not recommended to use.
getDB方法已被废弃,因此不建议使用该方法。
So far, we have set up a connection with MongoDB using the MongoClient and further connected to the baeldung database.
到目前为止,我们已经使用MongoClient设置了与MongoDB的连接,并进一步连接到baeldung数据库。
Let’s deep dive into different approaches to check the existence of a collection in MongoDB.
让我们深入了解在MongoDB中检查一个集合是否存在的不同方法。
3. Using the DB Class
3.使用DB类
The MongoDB Java Driver provides both synchronous and asynchronous method calls. In order to connect to the database, we just need to specify the database name. If the database is not present, MongoDB will automatically create one.
MongoDB的Java驱动提供了同步和异步的方法调用。为了连接到数据库,我们只需要指定数据库的名称。如果数据库不存在,MongoDB将自动创建一个。。
The collectionExists method can be used to check whether a collection is present or not:
collectionExists方法可以用来检查一个集合是否存在。
MongoClient mongoClient = new MongoClient("localhost", 27017);
DB db = mongoClient.getDB("baeldung");
String testCollectionName = "student";
System.out.println("Collection Name " + testCollectionName + " " + db.collectionExists(testCollectionName));
Here, the collectionExists method will return true if the collection exists, false otherwise.
这里,collectionExists方法将在集合存在时返回true,否则返回false。
The com.mongodb.DB API of the MongoDB Java driver is deprecated from version 3.x, but it is still accessible. Hence, the DB class is not recommended to use for a new project.
MongoDB Java 驱动程序的 com.mongodb.DB API 从 3.x 版本开始被弃用,但它仍可被访问。因此,不建议将DB类用于新项目。
4. Using the MongoDatabase Class
4.使用MongoDatabase类
The com.mongodb.client.MongoDatabase is an updated API for Mongo 3.x and above. Unlike the DB class, the MongoDatabase class does not provide any specific method to check the existence of a collection. But, there are various methods that we can use to get the desired results.
com.mongodb.client.MongoDatabase 是 Mongo 3.x 及以上版本的更新 API。与DB类不同,MongoDatabase类没有提供任何具体的方法来检查一个集合的存在。但是,我们可以使用各种方法来获得想要的结果。
4.1. Using the createCollection Method
4.1.使用createCollection方法
The createCollection method creates a new collection in MongoDB. But we can also use it to check whether a collection exists or not:
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");
}
The above code will create a new collection “student” if it isn’t already present in the database. The createCollection method will throw an exception in case the collection already exists.
上面的代码将创建一个新的集合”student”,如果它在数据库中还没有存在的话。createCollection方法将抛出一个异常,如果该集合已经存在的话。
This approach isn’t recommended as it creates a new collection in the database.
这种方法并不推荐,因为它在数据库中创建了一个新的集合。。
4.2. Using the listCollectionNames Method
4.2.使用listCollectionNames方法
The listCollectionNames method lists all the collections names in the database. Hence, we can use this method to solve the issue of collection existence.
listCollectionNames方法列出了数据库中所有的集合名称。因此,我们可以用这个方法来解决集合的存在问题。
Lets now look into an example code of listCollectionNames method using the Java driver code:
现在让我们看看使用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);
Here, we have iterated over the list of all the collection names in the database baeldung. For each occurrence, we match the collection string name with the testCollectionName. It will return true on a successful match, false otherwise.
在这里,我们遍历了数据库baeldung.中的所有集合名称的列表。对于每一次出现,我们将集合的字符串名称与testCollectionName进行匹配。匹配成功后,它将返回true,否则false。
4.3. Using the count Method
4.3.使用count方法
The count method of the MongoCollection counts the number of documents present in a collection.
MongoCollection的count方法计算一个集合中存在的文档数量。
As a workaround, we can use this method to check for the collection’s existence. Here is the Java code snippet for the same:
作为一种变通方法,我们可以使用这个方法来检查集合的存在。下面是相同的Java代码片断。
String databaseName="baeldung";
MongoDatabase database = mongoClient.getDatabase(databaseName);
String testCollectionName = "student";
MongoCollection<Document> collection = database.getCollection(testCollectionName);
Boolean collectionExists = collection.count() > 0 ? true : false;
System.out.println("collectionExists:- " + collectionExists);
Boolean expectedStatus = false;
assertEquals(expectedStatus, collectionExists);
This method doesn’t work if a collection exists without any data, In that case, it will return 0, but the collection exists with empty data.
如果一个集合在没有任何数据的情况下存在,这个方法就不起作用,在这种情况下,它将返回0,但是这个集合存在空的数据。
5. Conclusion
5.结论
In this article, we’ve explored various ways to check the existence of a collection using the MongoDatabase and DB class methods.
在本文中,我们探讨了使用MongoDatabase和DB类方法来检查一个集合是否存在的各种方法。
In short, the collectionExists method of com.mongodb.DB class and listCollectionNames method of com.mongodb.client.MongoDatabase are recommended to check the collection’s existence.
简而言之,推荐使用com.mongodb.DB类的collectionExists方法和com.mongodb.client.MongoDatabase的listCollectionNames方法来检查集合的存在。
As always, the source code and code snippet of all the examples is available over on GitHub.
一如既往,所有例子的源代码和代码片段都可以在GitHub上找到。