...

Не только SQL: знакомимся с документо-ориентированной базой данных MongoDB

реляционные и нереляционные базы данных примеры курсы обучение, MongoDB примеры запросов для аналитика JSON BSON, обучение системных и бизнес-аналитиков, курсы системный и бизнес-анализ, проектирование схемы БД, курсы бизнес-аналитик, основы баз данных, обучение системному и бизнес-анализу, Школа прикладного бизнес-анализа

Хотя большинство системных и бизнес-аналитиков чаще сталкиваются с реляционными базами данных, будет полезным знать про другие альтернативы. Сегодня рассмотрим примеры работы с документо-ориентированной 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 заявок на разные курсы от нескольких клиентов:

Упакуем эти заявки в структуру данных BSON. В качестве указания полей (ключей) будем использовать следующие названия:

Ключ Смысл Тип данных Пример записи
course Желаемый курс строка TTIS
name Имя клиента строка Анна
email Адрес электронной почты клиента строка 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
})

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

MongoDB JSON BSON пример
Пример выполнения запроса в MongoDB

Найдем всех юрлиц — корпоративных клиентов, которые не указали номер телефона. Запрос с таким условием фильтрации будет следующим:

db.collection.find({
  corp: true
},
{
  phone: 0
})

В результате выполнения запроса найдено 2 документа:

MongoDB JSON BSON пример
Пример выполнения запроса в MongoDB

Разумеется, в MongoDB можно выполнить еще множество других запросов на изменение данных, сохранение нескольких документов в один, выполнение агрегатных функций и пр. Однако, рассмотренная онлайн-песочница поддерживает не все из них. Попробовать поработать с ней можно самостоятельно, сформировав одну или несколько коллекций и поместив их в онлайн-песочницу https://mongoplayground.net/.

Разработка ТЗ на информационную систему по ГОСТ и SRS

Код курса
TTIS
Ближайшая дата курса
2 декабря, 2024
Продолжительность
16 ак.часов
Стоимость обучения
36 000 руб.

Подробнее эти и другие темы по основам архитектуры и интеграции информационных систем разбираются на курсах Школы прикладного бизнес-анализа в нашем лицензированном учебном центре обучения и повышения квалификации системных и бизнес-аналитиков в Москве:

 

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://mongoplayground.net/
  2. http://snakeproject.ru/rubric/article.php?art=mongodb_manual

Добавить комментарий