Перейти к основному содержимому

Проверка существования коллекции в MongoDB

· 4 мин. чтения

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 .