1. Обзор
MongoDB — это база данных NoSQL, в которой записи данных хранятся в виде документов BSON
в коллекции. У нас может быть несколько баз данных, и каждая база данных может иметь одну или несколько коллекций документов.
В отличие от реляционных баз данных, MongoDB создает коллекцию со вставленным документом без необходимости какого-либо определения структуры. В этом уроке мы изучим различные способы проверки существования коллекции. Мы будем использовать методы collectionExists, createCollection, listCollectionNames
и count
для проверки существования коллекции.
2. Подключение к базе данных
Чтобы получить доступ к любым данным коллекции, нам сначала нужно установить соединение с базой данных. Давайте подключимся к базе данных MongoDB, которая работает локально на нашем компьютере.
2.1. Создать соединение с помощью MongoClient
MongoClient
— это класс Java, используемый для установления соединения с экземпляром MongoDB:
MongoClient mongoClient = new MongoClient("localhost", 27017);
Здесь мы подключаемся к MongoDB, которая работает с портом по умолчанию 27017 на локальном хосте.
2.2. Подключиться к базе данных
Теперь давайте воспользуемся объектом MongoClient
для доступа к базе данных. Существует два метода доступа к базе данных с помощью MongoClient
.
Во-первых, мы будем использовать метод getDatabase
для доступа к базе данных foreach
:
MongoDatabase database = mongoClient.getDatabase("foreach");
Мы также можем использовать метод getDB
драйвера Mongo Java для подключения к базе данных:
DB db = mongoClient.getDB("foreach");
Метод getDB
устарел, поэтому его не рекомендуется использовать.
На данный момент мы установили соединение с MongoDB с помощью MongoClient и далее подключились к базе данных foreach
.
Давайте углубимся в различные подходы к проверке существования коллекции в MongoDB.
3. Использование класса БД
Драйвер Java MongoDB обеспечивает как синхронные, так и асинхронные вызовы методов. Для того, чтобы подключиться к базе данных, нам просто нужно указать имя базы данных. Если база данных отсутствует, MongoDB автоматически создаст ее.
Метод collectionExists
можно использовать для проверки наличия коллекции:
MongoClient mongoClient = new MongoClient("localhost", 27017);
DB db = mongoClient.getDB("foreach");
String testCollectionName = "student";
System.out.println("Collection Name " + testCollectionName + " " + db.collectionExists(testCollectionName));
Здесь метод collectionExists
вернет true
, если коллекция существует, и false в противном случае.
API -интерфейс com.mongodb.DB
драйвера Java MongoDB устарел с версии 3.x, но по-прежнему доступен. Следовательно, класс DB
не рекомендуется использовать для нового проекта.
4. Использование класса MongoDatabase
com.mongodb.client.MongoDatabase — это
обновленный API для Mongo 3.x и выше. В отличие от класса DB, класс MongoDatabase не предоставляет какого-либо специального метода для проверки существования коллекции. Но существуют различные методы, которые мы можем использовать для получения желаемых результатов.
4.1. Использование метода createCollection
Метод createCollection
создает новую коллекцию в MongoDB. Но мы также можем использовать его для проверки существования коллекции:
String databaseName="foreach";
MongoDatabase database = mongoClient.getDatabase(databaseName);
String testCollectionName = "student";
try {
database.createCollection(testCollectionName);
} catch (Exception exception) {
System.err.println("Collection:- "+testCollectionName +" already Exists");
}
Приведенный выше код создаст новую коллекцию « студент»
, если ее еще нет в базе данных. Метод createCollection
вызовет исключение, если коллекция уже существует.
Этот подход не рекомендуется, так как он создает новую коллекцию в базе данных.
4.2. Использование метода listCollectionNames
Метод listCollectionNames выводит
список имен всех коллекций в базе данных. Следовательно, мы можем использовать этот метод для решения вопроса о существовании коллекции.
Давайте теперь рассмотрим пример кода метода listCollectionNames
с использованием кода драйвера Java:
String databaseName="foreach";
MongoDatabase database = mongoClient.getDatabase(databaseName);
String testCollectionName = "student";
boolean collectionExists = database.listCollectionNames()
.into(new ArrayList()).contains(testCollectionName);
System.out.println("collectionExists:- " + collectionExists);
Здесь мы перебрали список всех имен коллекций в базе данных foreach.
Для каждого вхождения мы сопоставляем имя строки коллекции с testCollectionName
. В случае успешного совпадения он вернет true , в противном случае —
false
.
4.3. Использование метода подсчета
Метод count
MongoCollection подсчитывает
количество документов, присутствующих в коллекции.
В качестве обходного пути мы можем использовать этот метод для проверки существования коллекции. Вот фрагмент кода Java для того же самого:
String databaseName="foreach";
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);
Этот метод не работает, если коллекция существует без каких-либо данных. В этом случае он вернет 0, но коллекция существует с пустыми данными.
5. Вывод
В этой статье мы рассмотрели различные способы проверки существования коллекции с помощью методов класса MongoDatabase
и DB
.
Короче говоря, для
проверки существования коллекции рекомендуется использовать метод collectionExists класса
com.mongodb.DB
и метод listCollectionNames
класса com.mongodb.client.MongoDatabase.
Как всегда, исходный код и фрагменты кода всех примеров доступны на GitHub .