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

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