Введение в MongoDB. Руководство для начинающих

MongoDB - система управления базами данных с открытым исходным кодом, не требующая описания схемы таблиц. Классифицирована как NoSQL, использует JSON-подобные документы и схему базы данных.

Вступление

С переходом парадигмы в сторону динамического контента, спрос на базу данных No-SQL вырос. Это привело к появлению многочисленных No-SQL баз данных, таких как MongoDB.

MongoDB, классифицированная как база данных No-SQL, представляет собой базу данных на основе документов, в которой хранятся данные в виде документов JSON, автоматически сгенерированные для каждого документа.

База данных без SQL - это база данных, в которой структура таблиц не является фиксированной, в отличие от структурированных баз данных SQL. MongoDB хранит данные в виде строки JSON независимо от количества атрибутов или имени атрибутов в определенном столбце.

Это позволяет разработчикам быстро вносить изменения в объекты без необходимости каких-либо изменений на уровне базы данных.

MongoDB

Установка MongoDB

MongoDB, как и любая другая база данных, доступна в нескольких вариантах в зависимости от потребностей разработки.

  • MongoDB Atlas - База данных как услуга
  • Сервер совместной работы - бесплатный для сообщества разработчиков
  • MongoDB Enterprise Edition - коммерческая версия с дополнительными функциями

Каждый из них полностью совместим с любой операционной системой. Для начала, загрузите соответствующий установочный файл в соответствии с вашей операционной системой.

Процесс установки немного отличается для каждой операционной системы, и, следовательно, мы будем проходить установку каждой операционной системы отдельно.

Установка на MacOS

Загрузите архив .tgz, содержащий необходимые двоичные файлы. Разархивировав его, вы сможете просмотреть набор двоичных файлов, расположенных в папке bin.

  • Переместите папку bin в нужное место
  • Откройте терминал и измените каталог на каталог bin.
  • Выполните приведенную ниже команду, чтобы создать базу данных в нужном месте.
$ ./mongod --dbpath /path-to-desired-directory/
  • В приведенной выше команде замените путь к каталогу желаемым путем, и сервер будет запущен, как только команда будет выполнена.

Установка на Windows

Центр загрузки MongoDB предоставляет исполняемый MSI - пакет для установки MongoDB в Windows. Установка в Windows довольно проста и может быть выполнена с помощью нескольких команд после загрузки установки.

  • Выполните приведенные ниже команды для установки MongoDB на ПК с Windows
> cd /setup-folder/
> msiexec.exe /q /i .msi ^
INSTALLLOCATION="C:\Program Files\MongoDB\" ^
ADDLOCAL="MonitoringTools,ImportExportTools,MiscellaneousTools"

Приведенные выше команды приведут вас в соответствующий каталог и выполнят установку в указанном месте. После установки вам необходимо настроить путь к хранилищу базы данных по умолчанию для MongoDB. Команда ниже поможет вам настроить

> md \db\data

Приведенная выше команда создает папку db/data в каталоге, на который в данный момент указывает командная строка. В случае, если вам нужно заново настроить базу данных, вы можете использовать mongod.exe с аргументом dbpath, как показано ниже:

>"C:\Program Files\MongoDB\bin\mongod.exe" --dbpath d:\tutorial\mongodb\data

Установка на Linux

Как и в случае установки на MacOS, MongoDB для Linux-версий также доступна в виде архивированной группы двоичных файлов. Процесс установки MongoDB довольно похож.

  • Переместить двоичные файлы в нужное место
  • Откройте терминал в папке
  • Выполните приведенную ниже команду с желаемым расположением БД
$ ./mongod --dbpath /path-to-desired-directory/

Создание первой коллекции

MongoDB хранит данные в форме документов JSON. Группа такой документации все вместе известна как коллекция в MongoDB. Таким образом, коллекция аналогична таблице в реляционной базе данных, а документ аналогичен записи.

Для хранения документов нам сначала нужно создать коллекцию. Интересной особенностью базы данных NoSQL является то, что в отличие от базы данных SQL вам не нужно указывать имена столбцов или типы данных в ней.

Первым шагом к созданию коллекции является создание базы данных. Чтобы создать базу данных и подключиться к ней с помощью командной строки, выполните приведенную ниже команду из домашнего каталога установки MongoDB.

$ ./bin/mongo tutorial

Эта команда используется для запуска подключения к базе данных и одновременного подключения к учебной базе данных. В журнале будет показано несколько строк, указывающих, что командная строка подключена к базе данных MongoDB.

Пример ответа в командной строке показан ниже, чтобы дать вам лучшее представление об этом.

команда $ ./bin/mongo tutorial
  • Чтобы создать коллекцию, выполните следующую команду:
$ > db.createCollection('firstCollection');

Вот как создается пустая коллекция. Следующим шагом является вставка данных и некоторая обработка записей с использованием командной строки MongoDB.

Вставка документа в коллекцию

Как обсуждалось выше, можно вставить практически любой JSON в каждую коллекцию MongoDB.

Давайте начнем со вставки первого документа JSON в коллекцию firstCollection, созданную выше.

> db.firstCollection.insertOne({name:'John',skill:'MongoDB'});

Приведенная выше команда вставляет один документ JSON в firstCollection . То же самое можно проверить с помощью команды, показанной ниже:

> db.firstCollection.find();

Приведенная выше команда имеет многократное использование в зависимости от варианта find() функции. Если аргументы не указаны, как в случае с приведенной выше командой, она выбирает все доступные документы из коллекции.

Вы можете вставить еще одну запись и попробовать то же самое. При этом выходные данные вышеуказанной команды будут аналогичны показанным ниже:

> db.firstCollection.find();
{ "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "John", "skill" : "MongoDB" }
{ "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "Itgap", "skill" : "Java,MongoDB,NodeJS" }

Как видно, показаны две доступные записи. Функция find()может быть легко использована для фильтрации документов на основе определенных параметров. Давайте отфильтруем документ, используя атрибут name.

Процесс фильтрации прост, и это можно понять из команды ниже:

db.firstCollection.find({name:'Itgap'});
{ "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "Itgap", "skill" : "Java,MongoDB,NodeJS" }

Фильтр также можно использовать с несколькими атрибутами в JSON. Хотя к запросу можно добавить любое количество параметров, ограничением этого подхода является то, что он соответствует только точному значению атрибутов.

Фильтрация записей с использованием регулярных выражений (Regex)

Чтобы выполнить MongoDB эквивалент MySQL- сочетанием like, MongoDB использует регулярное выражение. Регулярное выражение- это серия символов, образующих шаблон для соответствия. Литералы регулярного выражения похожи на те, которые используются в Javascript.

Для текущей коллекции мы попытаемся извлечь данные, сопоставив шаблон для атрибута skill. Команда ниже извлечет две записи, поскольку обе содержат строку MongoDB.

> db.firstCollection.find({skill:/.*MongoDB.*/});
{ "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "John", "skill" : "MongoDB" }
{ "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "Itgap", "skill" : "Java,MongoDB,NodeJS" }

> db.firstCollection.find({skill:/.*Java.*/});
{ "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "Itgap", "skill" : "Java,MongoDB,NodeJS" }

Приведенный выше код отображает результат двух разных строк в форме регулярного выражения. Первый запрос извлекает список документа, в котором атрибут skill содержит ключевое слово MongoDB, а другой - только людей, имеющих опыт работы с Java.

Следующая проблема в запросах, основанных на критериях, - это запрос с условием OR или AND.

Сложные запросы в MongoDB

Как видно из приведенных выше команд, MongoDB, работает с форматом JSON. Процесс объединения условий также зависит от самого JSON. MongoDB предоставляет такие операторы, как $or, $and, а также $not.

Давайте попробуем получить список документов, в которых атрибут name содержит John  или атрибут skill содержит Java.

> db.firstCollection.find({$or: [{name:'John'},{skill:/.*Java.*/}]});
{ "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "John", "skill" : "MongoDB" }
{ "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "Itgap", "skill" : "Java,MongoDB,NodeJS" }

Точно так же можно использовать оператор $and с массивом условий JSON, как показано выше.

Для следующего набора операторов нам нужно будет создать еще одну коллекцию и добавить в нее несколько записей, используя команды ниже.

> db.createCollection('studentmarks');
{ "ok" : 1 }
> db.studentmarks.insertMany([{name:'A',marks:20},{name:'B',marks:25},{name:'C',marks:22},{name:'D',marks:30}]);
{
	"acknowledged" : true,
	"insertedIds" : [
		ObjectId("5b06e7b5c29a7184535e783c"),
		ObjectId("5b06e7b5c29a7184535e783d"),
		ObjectId("5b06e7b5c29a7184535e783e"),
		ObjectId("5b06e7b5c29a7184535e783f")
	]
}

Следующий набор операторов, которые мы будем использовать, это операторы сравнения в запросе. Для сравнения значений с использованием таких критериев, как меньше или больше или не равно, мы используем соответствующие операторы в передаваемом нами значении.

Пример получения списка студентов с оценками выше 22 показан ниже.

db.studentmarks.find({marks:{$gt:22}});
{ "_id" : ObjectId("5b06e7b5c29a7184535e783d"), "name" : "B", "marks" : 25 }
{ "_id" : ObjectId("5b06e7b5c29a7184535e783f"), "name" : "D", "marks" : 30 }

Оператор $gt указывает больше, чем в критериях. Таким образом, документы с отметками более 22 отображаются. Точно так же есть другие операторы, которые можно использовать. Они перечислены ниже.

ОператорНазначениеПример
$eqЕсли значение равно{marks:{$eq:20}}
$gtЕсли значение больше{marks: {$gt:20}}
$ltЕсли значение меньше{marks: {$lt:20}}
$gteЕсли значение больше или равно{marks:{$gte:22}}
$lteЕсли значение меньше или равно{marks:{$lte:22}}
$neЕсли значение не равно{marks:{$ne:22}}
$inЕсли значение равно одному из значений массива{marks:{$in:[20,22]}}
$ninЕсли значение не равно одному из значений массива{marks:{$nin:[22,25]}}

Графический интерфейс (GUI) в MongoDB

В обсуждении выше мы использовали командную строку для выполнения наших запросов в MongoDB.

Использование командной строки может быть сложной задачей, когда речь идет о сложных запросах и большем наборе данных. Чтобы упростить просмотр данных и выполнение запросов, MongoDB предоставляет вам отличный инструмент с графическим интерфейсом, который называется MongoDB Compass.

MongoDB Compass можно легко загрузить с сайта загрузки MongoDB. После того, как вы загрузили и установили MongoDB Compass, запустите приложение, и вас будет приветствовать экран, похожий на экран, показанный ниже.

MongoDB Compass

Учитывая, что у вас запущен и работает сервер MongoDB, нажмите кнопку CONNECT со сведениями по умолчанию. Вы должны войти в систему и увидеть список доступных баз данных.

Щелкните по базе данных учебника, чтобы проверить список коллекций в учебной базе данных. Как показано ниже, он отображает список доступных коллекций в учебной базе данных.

MongoDB Compass

При щелчке по коллекции отображается список документов с необходимыми элементами управления для фильтрации записей с использованием JSON, а также средство для просмотра документов в формате JSON или табличном формате согласно вашему удобству.

Графический интерфейс также упрощает добавление документа. Все, что вам нужно сделать, это нажать кнопку INSERT DOCUMENT на экране, показанном ниже. Он открывает небольшое диалоговое окно с запросом деталей документа с автоматически сгенерированным идентификатором документа.

MongoDB Compass

Графический интерфейс упрощает множество операций, которые могут быть затруднены при использовании интерфейса командной строки MongoDB.

Мы описали суть NoSQL с помощью множества примеров и поняли, как документы отличаются от обычной записи реляционной базы данных.