1. Обзор
В этой статье мы рассмотрим интеграцию MongoDB , очень популярной базы данных NoSQL с открытым исходным кодом, с автономным клиентом Java.
MongoDB написан на C++ и имеет целый ряд надежных функций, таких как уменьшение карты, автоматическое разделение, репликация, высокая доступность и т. д.
2. МонгоБД
Начнем с нескольких ключевых моментов о самой MongoDB:
- хранит данные в JSON -подобных документах, которые могут иметь различную структуру
- использует динамические схемы, что означает, что мы можем создавать записи без предварительного определения чего-либо
- структуру записи можно изменить, просто добавив новые поля или удалив существующие
Вышеупомянутая модель данных дает нам возможность представлять иерархические отношения, легко хранить массивы и другие более сложные структуры.
3. Терминология
Понимание концепций MongoDB станет проще, если мы сможем сравнить их со структурами реляционных баз данных.
Давайте посмотрим на аналогии между Mongo и традиционной системой MySQL:
Таблица
в MySQL становитсяколлекцией
в MongoСтрока
становитсядокументом
Столбец
становитсяполем
Соединения
определяются каксвязывающие
ивстроенные
документы .
Конечно, это упрощенный способ взглянуть на основные концепции MongoDB, но, тем не менее, полезный.
Теперь давайте углубимся в реализацию, чтобы понять эту мощную базу данных.
4. Зависимости Maven
Нам нужно начать с определения зависимости драйвера Java для MongoDB:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.1</version>
</dependency>
Чтобы проверить, не вышла ли какая-нибудь новая версия библиотеки — отслеживайте релизы здесь .
5. Использование MongoDB
Теперь давайте приступим к реализации запросов Mongo с помощью Java. Мы будем следовать основным операциям CRUD, поскольку с них лучше всего начинать.
5.1. Установите соединение с MongoClient
Во-первых, давайте установим соединение с сервером MongoDB. С версией >= 2.10.0 мы будем использовать MongoClient
:
MongoClient mongoClient = new MongoClient("localhost", 27017);
А для более старых версий используйте класс Mongo :
Mongo mongo = new Mongo("localhost", 27017);
5.2. Подключение к базе данных
Теперь давайте подключимся к нашей базе данных. Интересно отметить, что нам не нужно его создавать. Когда Mongo увидит, что база данных не существует, она создаст ее для нас:
DB database = mongoClient.getDB("myMongoDb");
Иногда по умолчанию MongoDB работает в режиме аутентификации. В этом случае нам необходимо пройти аутентификацию при подключении к базе данных.
Мы можем сделать это, как показано ниже:
MongoClient mongoClient = new MongoClient();
DB database = mongoClient.getDB("myMongoDb");
boolean auth = database.authenticate("username", "pwd".toCharArray());
5.3. Показать существующие базы данных
Отобразим все существующие базы данных. Когда мы хотим использовать командную строку, синтаксис для отображения баз данных аналогичен MySQL:
show databases;
В Java мы отображаем базы данных, используя приведенный ниже фрагмент:
mongoClient.getDatabaseNames().forEach(System.out::println);
Вывод будет:
local 0.000GB
myMongoDb 0.000GB
Выше локальная
база данных Mongo по умолчанию.
5.4. Создать коллекцию
Начнем с создания коллекции
(эквивалент таблицы для MongoDB) для нашей базы данных. После того, как мы подключились к нашей базе данных, мы можем создать коллекцию
как:
database.createCollection("customers", null);
Теперь давайте отобразим все существующие коллекции для текущей базы данных:
database.getCollectionNames().forEach(System.out::println);
Вывод будет:
customers
5.5. Сохранить – Вставить
Операция сохранения
имеет семантику сохранения или обновления: если идентификатор
присутствует, выполняется обновление
, если нет — выполняется вставка
.
Когда мы сохраняем
нового клиента:
DBCollection collection = database.getCollection("customers");
BasicDBObject document = new BasicDBObject();
document.put("name", "Shubham");
document.put("company", "ForEach");
collection.insert(document);
Сущность будет вставлена в базу данных:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "ForEach"
}
Далее мы рассмотрим ту же операцию — сохранение
— с семантикой обновления .
5.6. Сохранить — обновить
Давайте теперь посмотрим на семантику сохранения
с обновлением
, работающую с существующим клиентом:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "ForEach"
}
Теперь, когда сохраним
существующего клиента — обновим его:
BasicDBObject query = new BasicDBObject();
query.put("name", "Shubham");
BasicDBObject newDocument = new BasicDBObject();
newDocument.put("name", "John");
BasicDBObject updateObject = new BasicDBObject();
updateObject.put("$set", newDocument);
collection.update(query, updateObject);
База данных будет выглядеть так:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "ForEach"
}
Как видите, в этом конкретном примере save
использует семантику update
, потому что мы используем объект с заданным _id
.
5.7. Чтение документа
из коллекции
Давайте найдем документ
в коллекции
, выполнив запрос:
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
DBCursor cursor = collection.find(searchQuery);
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
Он покажет единственный документ
, который у нас есть на данный момент в нашей коллекции
:
[
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "ForEach"
}
]
5.8. Удалить
документ
_ ``
Давайте перейдем к нашей последней операции CRUD, удалению:
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
collection.remove(searchQuery);
После выполнения вышеуказанной команды наш единственный документ
будет удален из коллекции
.
6. Заключение
Эта статья была кратким введением в использование MongoDB из Java.
Реализацию всех этих примеров и фрагментов кода можно найти на GitHub — это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть.