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 .