Автор оригинала: Shubham Aggarwal.
1. Обзор
В этой статье мы рассмотрим интеграцию MongoDB , очень популярной базы данных с открытым исходным кодом NoSQL с автономным Java-клиентом.
MongoDB написан на C++ и имеет довольно много надежных функций, таких как mapreduce, автоматическое сегментирование, репликация, высокая доступность и т. Д.
2. MongoDB
Давайте начнем с нескольких ключевых моментов о самом MongoDB:
- хранит данные в JSON -подобных документах, которые могут иметь различные структуры
- использует динамические схемы, что означает, что мы можем создавать записи, ничего не предопределяя
- структура записи может быть изменена простым добавлением новых полей или удалением существующих
Вышеупомянутая модель данных дает нам возможность легко представлять иерархические отношения, хранить массивы и другие более сложные структуры.
3. Терминология
Понимание концепций в MongoDB становится проще, если мы можем сравнить их со структурами реляционных баз данных.
Давайте рассмотрим аналогии между Mongo и традиционной системой MySQL:
- Таблица в MySQL становится Коллекцией в Mongo
- Строка становится Документом
- Столбец становится полем
- Соединения определяются как связывание и встроенные документы
Это, конечно, упрощенный способ взглянуть на основные концепции MongoDB, но, тем не менее, полезный.
Теперь давайте погрузимся в реализацию, чтобы понять эту мощную базу данных.
4. Зависимости Maven
Нам нужно начать с определения зависимости драйвера Java для MongoDB:
org.mongodb mongo-java-driver 3.4.1
Чтобы проверить, была ли выпущена какая – либо новая версия библиотеки – отслеживайте выпуски здесь .
5. Использование MongoDB
Теперь давайте начнем реализовывать запросы Mongo с помощью Java. Мы будем следовать основным операциям CRUD, поскольку они лучше всего подходят для начала.
5.1. Установить Соединение С MongoClient
Во-первых, давайте установим соединение с сервером MongoDB. С версией.10.0 мы будем использовать MongoClient :
MongoClient mongoClient = new MongoClient("localhost", 27017);
А для более старых версий используйте Mongo class:
Mongo mongo = new Mongo("localhost", 27017);
5.2. Подключение к базе данных
Теперь давайте подключимся к нашей базе данных. Интересно отметить, что нам не нужно его создавать. Когда Монго увидит, что база данных не существует, он создаст ее для нас:
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
Выше, local является базой данных Mongo по умолчанию.
5.4. Создание коллекции
Давайте начнем с создания Коллекции (эквивалент таблицы для MongoDB) для нашей базы данных. Как только мы подключимся к нашей базе данных, мы сможем создать Коллекцию как:
database.createCollection("customers", null);
Теперь давайте отобразим все существующие коллекции для текущей базы данных:
database.getCollectionNames().forEach(System.out::println);
Выход будет:
customers
5.5. Сохранить – Вставить
Операция save имеет семантику сохранения или обновления: если присутствует id , она выполняет update , если нет – она выполняет insert .
Когда мы сохраняем нового клиента:
DBCollection collection = database.getCollection("customers"); BasicDBObject document = new BasicDBObject(); document.put("name", "Shubham"); document.put("company", "Baeldung"); collection.insert(document);
Объект будет вставлен в базу данных:
{ "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"), "name" : "Shubham", "company" : "Baeldung" }
Далее мы рассмотрим ту же операцию – save – с семантикой update .
5.6. Сохранить – Обновить
Давайте теперь рассмотрим save с update семантикой, работающей с существующим клиентом:
{ "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"), "name" : "Shubham", "company" : "Baeldung" }
Теперь, когда мы сохраним существующего клиента – мы обновим его:
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" : "Baeldung" }
Как вы можете видеть, в этом конкретном примере 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" : "Baeldung" } ]
5.8. Удалить документ
Давайте перейдем к нашей последней операции CRUD, удалению:
BasicDBObject searchQuery = new BasicDBObject(); searchQuery.put("name", "John"); collection.remove(searchQuery);
При выполнении приведенной выше команды наш единственный Документ будет удален из Коллекции .
6. Заключение
Эта статья была кратким введением в использование MongoDB из Java.
Реализацию всех этих примеров и фрагментов кода можно найти на GitHub – это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть.