Руководство по MongoDB с Java
1. обзор
В этой статье мы рассмотрим интеграциюMongoDB, очень популярной базы данных с открытым исходным кодом NoSQL, с автономным клиентом Java.
MongoDB написан на C ++ и обладает целым рядом полезных функций, таких как сокращение карт, автоматическое разбиение, репликация, высокая доступность и т. Д.
2. MongoDB
Начнем с нескольких ключевых моментов, касающихся самой MongoDB:
-
хранит данные вJSON-подобных документах, которые могут иметь различную структуру
-
использует динамические схемы, что означает, что мы можем создавать записи, ничего не предопределяя
-
структуру записи можно изменить, просто добавив новые поля или удалив существующие
Вышеупомянутая модель данных дает нам возможность представлять иерархические отношения, легко хранить массивы и другие более сложные структуры.
3. терминологической
Понимание концепций в MongoDB станет проще, если мы сможем сравнить их со структурами реляционных баз данных.
Давайте посмотрим на аналогии между Mongo и традиционной системой MySQL:
-
Table в MySQL становитсяCollection в Mongo
-
Row становитсяDocument
-
Column становитсяField
-
Joins определены как документыlinking иembedded
Это, конечно, упрощенный взгляд на основные концепции MongoDB, но, тем не менее, полезный.
Теперь давайте погрузимся в реализацию, чтобы понять эту мощную базу данных.
4. Maven Зависимости
Нам нужно начать с определения зависимости драйвера Java для MongoDB:
org.mongodb
mongo-java-driver
3.4.1
Чтобы проверить, выпущена ли какая-либо новая версия библиотеки -track the releases here.
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
Вышеlocal - это база данных Mongo по умолчанию.
5.4. СоздайтеCollection
Начнем с созданияCollection (эквивалент таблицы для MongoDB) для нашей базы данных. После подключения к нашей базе данных мы можем создатьCollection как:
database.createCollection("customers", null);
Теперь давайте отобразим все существующие коллекции для текущей базы данных:
database.getCollectionNames().forEach(System.out::println);
Выход будет:
customers
5.5. Сохранить - Вставить
Операцияsave имеет семантику сохранения или обновления: если присутствуетid, она выполняетupdate, если нет - выполняетinsert.
Когда мыsave новый клиент:
DBCollection collection = database.getCollection("customers");
BasicDBObject document = new BasicDBObject();
document.put("name", "Shubham");
document.put("company", "example");
collection.insert(document);
Сущность будет вставлена в базу данных:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "example"
}
Затем мы рассмотрим ту же операцию -save - с семантикойupdate.
5.6. Сохранить - Обновить
Теперь посмотрим наsave с семантикойupdate, работающий с существующим клиентом:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "example"
}
Теперь, когда мыsave существующего клиента - мы обновим его:
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" : "example"
}
Как видите, в этом конкретном примереsave использует семантикуupdate, потому что мы используем объект с заданным_id.
5.7. ПрочитатьDocument изCollection
Давайте найдемDocument вCollection, выполнив запрос:
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
DBCursor cursor = collection.find(searchQuery);
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
Он покажет толькоDocument, которые у нас есть на данный момент в нашемCollection:
[
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "example"
}
]
5.8. Deleteс аDocument
Перейдем к нашей последней операции CRUD - удалению:
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
collection.remove(searchQuery);
После выполнения вышеуказанной команды наш единственныйDocument будет удален изCollection.
6. Заключение
Эта статья была кратким введением в использование MongoDB из Java.
Реализацию всех этих примеров и фрагментов кода можно найти вover on GitHub - это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть.