Хотя большинство системных и бизнес-аналитиков чаще сталкиваются с реляционными базами данных, будет полезным знать про другие альтернативы. Сегодня рассмотрим примеры работы с документо-ориентированной NoSQL-базой MongoDB, развернутой в онлайн-песочнице https://mongoplayground.net/.
Что такое MongoDB и как она работает: краткий ликбез
Здесь я уже упоминала про различные виды NoSQL-баз. Они предназначены для хранения больших объемов данных со сложной или изменяющейся структурой. В отличие от реляционных баз данных, NoSQL-СУБД обычно не поддерживают стандартный язык SQL-запросов, а данные в них хранятся не в связанных таблицах, а в других структурах, оптимизированных под варианты использования. Например, графовая база данных Neo4j, о которой я рассказываю в этой статье, хранит данные в виде графа и отлично решает задачи анализа социальных связей, поиска оптимальных путей, исследования трафика и других подобных задач. А документо-ориентированная база данных MongoDB хорошо справляется с задачами управления разнообразным контентом. К примеру, системы чат-ботов для поддержки пользователей на сайтах, где можно отправить вопрос оператору, при желании указать свои имя и контакты (емейл и/или телефон) для последующей связи, а также присоединить к обращению скриншот или другое вложение.
В качестве примера рассмотрим случай, с которым мы часто сталкиваемся в нашем учебном центре, когда клиент оставляет заявку на обучение. Несмотря на ограниченный список полей в форме обратной связи (Курс, Имя, Емейл, Телефон, Сообщение), заявки заполняются с разной степенью полноты. Кто-то не хочет оставлять свой номер телефона и не заполняет это поле, а кому-то нужно дать больше вводной информации о своих потребностях, что вносится в поле Сообщение. Рассмотрим, как представить сведения по заявкам физических лиц и корпоративных клиентов в документо-ориентированной базе данных MongoDB.
Для этого сперва вспомним основные принципы работы этого NoSQL-хранилища:
- вместо таблиц MongoDB использует коллекции, где хранятся документы – аналоги строк в реляционной БД;
- MongoDB хранит данные в виде JSON-документов с различным уровнем глубины, кодируя их в бинарном формате BSON, который добавляет поддержку таких типов данных, как Date и binary, изначально не поддерживаемых в JSON;
- разные коллекции могут иметь разные структуры, причем даже в рамках одной коллекции у документов может различаться набор полей и их типы данных;
- будучи NoSQL-хранилищем, MongoDB не поддерживает классические SQL-запросы и по-своему реализует некоторые операции. В частности, вместо соединения таблиц с оператором JOIN в MongoDB применяется сохранение нескольких документов в одну коллекцию, чтобы потом работать с ней. Поддерживаются операции вставки, изменения и удаления данных, а также выборки документов с фильтрацией, группировкой и агрегацией по значениям полей.
Поняв ключевые особенности хранения данных в MongoDB, рассмотрим, как сохранить в этой NoSQL-СУБД данные по заявкам клиентов. Также рассмотрим, как сделать запросы к ним.
Основы архитектуры и интеграции информационных систем
Код курса
OAIS
Ближайшая дата курса
20 января, 2025
Продолжительность
16 ак.часов
Стоимость обучения
36 000 руб.
Практический пример BSON-структуры данных и запросы к ней
Предположим, у нас есть 5 заявок на разные курсы от нескольких клиентов:
- Татьяна из Казани хочет заказать для 20 сотрудников своей компании офлайн-курс по разработке ТЗ с кодом TTIS. Для связи Татьяна оставила свой емейл и телефон.
- Бориса интересует индивидуальное онлайн-обучение на курсе по моделированию бизнес-процессов (MODP). Связаться с Борисом можно по электронной почте.
- Лиза из России хочет на групповой онлайн-курс по основам архитектуры и интеграции информационных систем (OAIS) и просит связаться с ней в мессенджере Телеграм;
- Никите из Казахстана, который оставил контактный номер телефона, нужен групповой офлайн-курс для сотрудников Банка по методам управления бизнес-анализом (BAMP) в городе Астана;
- Алексей из Москвы хочет офлайн обучиться моделированию бизнес-процессов в индивидуальном режиме на курсе MODP. Для уточнения условий Алексей просит позвонить ему на указанный номер телефона.
Упакуем эти заявки в структуру данных BSON. В качестве указания полей (ключей) будем использовать следующие названия:
Ключ | Смысл | Тип данных | Пример записи |
course | Желаемый курс | строка | TTIS |
name | Имя клиента | строка | Анна |
Адрес электронной почты клиента | строка | anna@email.ru | |
phone | Телефон клиента | строка | 123456789 |
corp | true для юрлиц, false для физлиц | логический | true/false |
country | страна | строка | |
city | город | строка | Казань |
online | true для онлайн-занятий, false для офлайн-обучения | логический | true/false |
group | true для обучения в группе, false для индивидуального обучения | логический | true/false |
number_of_students | Количестве студентов в группе для корпоративного обучения | число | 20 |
info | Дополнительная информация | строка | Позвоните мне для уточнения деталей |
Чтобы показать, как MongoDB Работает со вложенными структурами данных, упакуем поля country, city, online, group, number_of_students и info в запись под названием wishes. В итоге получим следующую коллекцию в MongoDB:
[ { "course": "TTIS", "name": "Анна", "email": "anna@email.ru", "phone": "123456789", "corp": true, "wishes": { "city": "Казань", "online": true, "group ": true, "number_of_students": 20 } }, { "course": "MODP", "name": "Борис", "email": "boris@email.ru", "corp": false, "wishes": { "online": true, "group ": false, } }, { "course": "OAIS", "name": "Лиза", "phone": "987654321", "corp": false, "wishes": { "country": "Россия", "online": true, "group ": true, "info": "Прошу связаться со мной в телеграм" } }, { "course": "BAMP", "name": "Никита", "phone": "1122334455", "email": "nikita@email.bank", "corp": true, "wishes": { "country": "Казахстан", "city": "Астана", "online": false, "group ": true, "company": "Банк" } }, { "course": "MODP", "name": "Алексей", "phone": "998887766", "corp": false, "wishes": { "country": "Россия", "city": "Москва", "online": false, "group ": false, "info": "Позвоните мне для уточнения деталей" } } ]
Как представить эту структуру данных в других форматах (XML, YAMl, Protobuf), читайте в нашей новой статье.
В качестве прикладного инструмента будем использовать онлайн-песочницу https://mongoplayground.net/. Вставим созданную структуру данных ка коллекцию и сделаем к ней запрос. Например, какие клиенты хотят заниматься офлайн. Для этого напишем в разделе Query следующий запрос:
db.collection.find({ "wishes.online": false })
В результате выполнения получим набор документов, которые соответствуют заданным условиям фильтрации. При этом движок также отобразил идентификатор каждого документа, который был создан автоматически.
Найдем всех юрлиц — корпоративных клиентов, которые не указали номер телефона. Запрос с таким условием фильтрации будет следующим:
db.collection.find({ corp: true }, { phone: 0 })
В результате выполнения запроса найдено 2 документа:
Разумеется, в MongoDB можно выполнить еще множество других запросов на изменение данных, сохранение нескольких документов в один, выполнение агрегатных функций и пр. Однако, рассмотренная онлайн-песочница поддерживает не все из них. Попробовать поработать с ней можно самостоятельно, сформировав одну или несколько коллекций и поместив их в онлайн-песочницу https://mongoplayground.net/.
Разработка ТЗ на информационную систему по ГОСТ и SRS
Код курса
TTIS
Ближайшая дата курса
2 декабря, 2024
Продолжительность
16 ак.часов
Стоимость обучения
36 000 руб.
Подробнее эти и другие темы по основам архитектуры и интеграции информационных систем разбираются на курсах Школы прикладного бизнес-анализа в нашем лицензированном учебном центре обучения и повышения квалификации системных и бизнес-аналитиков в Москве:
- Основы архитектуры и интеграции информационных систем
- Разработка ТЗ на информационную систему по ГОСТ и SRS
Источники