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

Как проверить наличие поля в MongoDB?

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

1. Обзор

В этом коротком руководстве мы увидим, как проверить существование поля в MongoDB . ``

Сначала мы создадим простую базу данных Mongo и коллекцию образцов. Затем мы поместим в него фиктивные данные, чтобы использовать их позже в наших примерах. После этого мы покажем, как проверить, существует ли поле в собственном запросе Mongo, а также в Java.

2. Пример конфигурации

Прежде чем мы начнем проверять существование поля, нам нужна существующая база данных, коллекция и фиктивные данные для последующего использования. Для этого мы будем использовать оболочку Mongo.

Во-первых, давайте переключим контекст оболочки Mongo на существующую базу данных:

use existence

Стоит отметить, что MongoDB создает базу данных только при первом сохранении данных в этой базе данных. Мы вставим одного пользователя в коллекцию пользователей :

db.users.insert({name: "Ben", surname: "Big" })

Теперь у нас есть все необходимое для проверки, существует поле или нет.

3. Проверка существования поля в Mongo Shell

Иногда нам нужно проверить наличие определенного поля с помощью простого запроса, например, в Mongo Shell или любой другой консоли базы данных. К счастью для нас, Mongo предоставляет для этой цели специальный оператор запроса $exists :

db.users.find({ 'name' : { '$exists' : true }})

Мы используем стандартный метод find Mongo, в котором мы указываем искомое поле и используем оператор запроса $exists . Если поле имени существует в коллекции пользователей , будут возвращены все строки, содержащие это поле:

[
{
"_id": {"$oid": "6115ad91c4999031f8e6f582"},
"name": "Ben",
"surname": "Big"
}
]

Если поле отсутствует, мы получим пустой результат.

4. Проверка существования поля в Java

Прежде чем мы рассмотрим возможные способы проверки существования поля в Java, давайте добавим в наш проект необходимую Mongo-зависимость . Вот зависимость Maven:

<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.10</version>
</dependency>

А вот версия Gradle:

implementation group: 'org.mongodb', name: 'mongo-java-driver', version: '3.12.10'

Наконец, давайте подключимся к существующей базе данных и коллекции пользователей :

MongoClient mongoClient = new MongoClient();
MongoDatabase db = mongoClient.getDatabase("existence");
MongoCollection<Document> collection = db.getCollection("users");

4.1. Использование фильтров

com.mongodb.client.model.Filters — это служебный класс из зависимости Mongo, который содержит множество полезных методов. Мы собираемся использовать метод exists() в нашем примере:

Document nameDoc = collection.find(Filters.exists("name")).first();
assertNotNull(nameDoc);
assertFalse(nameDoc.isEmpty());

Сначала мы пытаемся найти элементы из коллекции пользователей и получить первый найденный элемент. Если указанное поле существует, в качестве ответа мы получаем документ nameDoc . Это не null и не пусто.

Теперь давайте посмотрим, что происходит, когда мы пытаемся найти несуществующее поле:

Document nameDoc = collection.find(Filters.exists("non_existing")).first();
assertNull(nameDoc);

Если ни один элемент не найден, мы получаем пустой документ в качестве ответа.

4.2. Использование запроса документа

Класс com.mongodb.client.model.Filters — не единственный способ проверить существование поля. Мы можем использовать экземпляр com.mongodb.BasicDBObject:

Document query = new Document("name", new BasicDBObject("$exists", true));
Document doc = collection.find(query).first();
assertNotNull(doc);
assertFalse(doc.isEmpty());

Поведение такое же, как и в предыдущем примере. Если элемент найден, мы получаем ненулевой документ , который пуст.

Так же код ведет себя и в ситуации, когда мы пытаемся найти несуществующее поле:

Document query = new Document("non_existing", new BasicDBObject("$exists", true));
Document doc = collection.find(query).first();
assertNull(doc);

Если ни один элемент не найден, мы получаем пустой документ в качестве ответа.

5. Вывод

В этой статье мы обсудили, как проверить наличие поля в MongoDB . Во-первых, мы показали, как создать базу данных Mongo, коллекцию и как вставить фиктивные данные. Затем мы объяснили, как проверить, существует ли поле в оболочке Mongo, используя простой запрос. Наконец, мы объяснили, как проверить наличие поля, используя com.mongodb.client.model.Filters и подход к запросу документа .

Как всегда, полный исходный код статьи доступен на GitHub .