Перейти до основного вмісту

Основи MongoDB

Сучасному веб-додатку потрібне сховище даних. Традиційно для цього використовувалися SQL бази даних, але прогрес не стоїть на місці та з'явилася альтернатива як NoSQL баз даних. Ці бази даних взяли до уваги розподілену природу мережі Інтернет і, подібно до Node.js, натомість зосередилися на паралелізмі для масштабування продуктивності. Ми розглянемо провідну документоорієнтовану базу даних MongoDB.

MongoDB є нереляційною базою даних типу NoSQL. База заснована на моделі документів - об'єкти даних зберігаються у вигляді окремих документів у колекції

Колекція та документ

Дані у MongoDB групуються в колекції. Колекція - це збір документів, які мають однакове призначення. Колекція подібна до таблиці в SQL базі даних, але відрізняється тим, що для колекції немає суворої схеми та документи колекції можуть мати різну структуру.

Документ – це представлення елемента інформації у базі даних. Вони можуть складатися з підлеглих документів, і ця модель даних більше підходить для веб-застосунків. Максимальний розмір документа обмежений 16 Мб.

У MongoDB у якості мови запитів використовується JavaScript та JSON-структури. Вибір мови запиту пояснюється тим, що MongoDB використовує JSON-формат для подання документів та виведення результатів. Фізично JSON-структури зберігаються у бінарному BSON-форматі.

BSON

Документи (тобто об'єкти) відповідають власним типам даних у багатьох мовах програмування. Вбудовані документи та масиви скорочують потребу в дорогих об'єднаннях.

У наступній таблиці представлені відмінності в термінології між SQL та MongoDB.

SQL терміниMongoDB терміни
база данихбаза даних
таблицяколекція
рядокдокумент
стовпецьполе
індексіндекс
joins$lookup

Первинний ключ. У SQL треба вказати будь-який унікальний стовпець чи комбінацію стовпців у якості первинного ключа. У MongoDB первинний ключ автоматично встановлюється у полі _id. Фактично змінна _id це об'єкт типу ObjectId

_id: ObjectId('5f15996fbbde793a107af359');

Він містить 12 байт, кожен з яких формується певним чином.

  • 4 - байтове значення (5f15996f), позначає секунди, починаючи з останнього запису
  • 3 - байтове значення (bbde79), позначає ідентифікатор машини
  • 2 - байтове значення (3a10), що позначає ідентифікатор процесу
  • 3 - байтовий лічильник (7af359), починаючи з випадкового значення

MongoDB Atlas

Замість встановлення бази даних локально, ми використовуватимемо хмарне сховище MongoDB Atlas.

MongoDB Atlas - це варіант служби MongoDB, розміщеної у хмарі, яка не вимагає додаткових витрат на встановлення та пропонує безкоштовний рівень для початку роботи

Пройдіть реєстрацію, найкраще прив'язавши до хмари свій обліковий запис Google. Створіть свій перший кластер. Вибирайте регіон із безкоштовним кластером M0 Sandbox, розміром 512 Мб. Якщо все пройшло успішно, у вас має бути доступ до dashboard

dashboard

Тепер необхідно виконати попереднє налаштування нашої хмарної бази. Перше, перейдіть в лівому меню на вкладку Network Access і додайте IP адреси у яких буде доступ до хмарної бази даних.

ip

Як варіант можна дозволити доступ із будь-якої IP адреси 0.0.0.0/0. Але можете вказати лише необхідні вам адреси.

Другим кроком необхідно завести користувача для нашої бази даних. Цей обліковий запис ми будемо використовувати для доступу до бази даних з нашої програми та графічного інтерфейсу. Переходимо у вкладку Database Access і вибираємо Add New Database User. Вибираємо метод автентифікації за допомогою пароля. Придумайте ім'я та пароль користувачеві і запам'ятайте, ми помістимо їх надалі в змінні оточення. Також виставте привілеї доступу як читання та запис до бази даних.

Database Access

Попереднє налаштування закінчено і тепер можна повернутися на вкладку Cluster. Тут вибираємо Connect. У вспливаючому вікні вибираємо Connect your application

Cluster

Треба вибрати драйвер для Node.js. Нам нададуть рядок для доступу до бази даних

mongodb+srv://<username>:<password>@krabaton.5mlpr.gcp.mongodb.net/<dbname>?retryWrites=true&w=majority

У цьому рядку є три плейсхолдери:

  • <username> - ім'я користувача що ми зареєстрували
  • <password> - його пароль
  • <dbname> - Ім'я бази даних. Буде створена при зверненні до хмари.

За допомогою цього рядка ми з'єднуватимемося з нашою хмарною базою даних