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

Руководство по MongoDB с Java

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

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, поэтому его должно быть легко импортировать и запускать как есть.