Основи MongoDB
Сучасному веб-додатку потрібне сховище даних. Традиційно для цього використовувалися SQL бази даних, але прогрес не стоїть на місці та з'явилася альтернатива як NoSQL баз даних. Ці бази даних взяли до уваги розподілену природу мережі Інтернет і, подібно до Node.js, натомість зосередилися на паралелізмі для масштабування продуктивності. Ми розглянемо провідну документоорієнтовану базу даних MongoDB.
MongoDB є нереляційною базою даних типу NoSQL. База заснована на моделі документів - об'єкти даних зберігаються у вигляді окремих документів у колекції
Колекція та документ
Дані у MongoDB групуються в колекції. Колекція - це збір документів, які мають однакове призначення. Колекція подібна до таблиці в SQL базі даних, але відрізняється тим, що для колекції немає суворої схеми та документи колекції можуть мати різну структуру.
Документ – це представлення елемента інформації у базі даних. Вони можуть складатися з підлеглих документів, і ця модель даних більше підходить для веб-застосунків. Максимальний розмір документа обмежений 16 Мб.
У MongoDB у якості мови запитів використовується JavaScript та JSON-структури. Вибір мови запиту пояснюється тим, що MongoDB використовує JSON-формат для подання документів та виведення результатів. Фізично JSON-структури зберігаються у бінарному 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
Тепер необхідно виконати попереднє налаштування нашої хмарної бази. Перше, перейдіть в лівому меню на вкладку Network Access і додайте IP адреси у яких буде доступ до хмарної бази даних.
Як варіант можна дозволити доступ із будь-якої IP адреси 0.0.0.0/0
. Але можете
вказати лише необхідні вам адреси.
Другим кроком необхідно завести користувача для нашої бази даних. Цей обліковий запис ми будемо використовувати для доступу до бази даних з нашої програми та графічного інтерфейсу. Переходимо у вкладку Database Access і вибираємо Add New Database User. Вибираємо метод автентифікації за допомогою пароля. Придумайте ім'я та пароль користувачеві і запам'ятайте, ми помістимо їх надалі в змінні оточення. Також виставте привілеї доступу як читання та запис до бази даних.
Попереднє налаштування закінчено і тепер можна повернутися на вкладку Cluster. Тут вибираємо Connect. У вспливаючому вікні вибираємо Connect your application
Треба вибрати драйвер для Node.js. Нам нададуть рядок для доступу до бази даних
mongodb+srv://<username>:<password>@krabaton.5mlpr.gcp.mongodb.net/<dbname>?retryWrites=true&w=majority
У цьому рядку є три плейсхолдери:
<username>
- ім'я користувача що ми зареєстрували<password>
- його пароль<dbname>
- Ім'я бази даних. Буде створена при зверненні до хмари.
За допомогою цього рядка ми з'єднуватимемося з нашою хмарною базою даних