Mongoose
Mongoose - це спеціальна ODM-бібліотека (Object Data Modelling) для роботи з MongoDB. Ця бібліотека дозволяє спростити роботу з базою даних та структурувати схеми колекцій та документів. Також можна реалізувати валідацію даних.
Підключення бібліотеки
Підключення до бази даних
Підключення до самої бази даних виконується методом mongoose.connect(). В нього першим параметром передають адресу підключення до бази даних, а другим можна передати об'єкт налаштувань. Оскільки це асинхронна функція, то повертає проміс, тому потрібно передбачити відловлення помилки(then і catch).
В цілому підключення до бази даних відбувається в головному файлі програми (наприклад index.js) одразу після налаштування оточення, адже переважно з оточення і береться посилання на базу даних
Тут process.env.MONGO_URL - посилання на базу даних, яке береться з оточення.
За допомогою методу mongoose.disconnect() можна відключитися від бази даних.
Схема документа
Mongoose допомагає описати дані за певною схемою. Для цього бібліотека має клас Schema. Вона зазвичай описується в окремому файлі схеми. Також буде використовуватися і модель документа на базі створеної схеми. Спочатку потрібно під'єднати клас:
Встановимо схему:
Схема містить метадані об'єктів в яких вказується, які властивості матиме обʼєкт і який тип даних.
Доступні такі значення типів: String, Number, Date, Buffer, Boolean, Mixed, Objectid, Array.
Для складних властивостей (наприклад об'єкт) замість типу вказують визначення цього об'єкта.
По суті ми описали валідацію типів даних полів майбутнього документа. Але можна використати ширші параметри валідації від mongoose. В такому разі в схемі для кожного поля потрібно описати обʼєкт з правилами валідації. Доступні такі параметри:
required - вказує, що це поле обовʼязкове
min та max - задає мінімальне та максимальне значення для числових даних
minlength та maxlength - задає мінімальну та максимальну довжину для рядків
enum - рядок повинен мати одне із значень із вказаного масиву рядків
match - рядок повинен відповідати регулярному виразу
Якщо спробувати додати некоректні дані до бази даних, то запит на додавання поверне помилку.
Далі потрібно створити модель на основі описаної схеми:
У цьому записі перший параметр у методі mongoose.model вказує на назву моделі (так буде називатися і колекція в базі даних), а другий параметр - це схема описана раніше.
Далі можна створювати об'єкти для цієї моделі:
Щоб зберегти обʼєкт в базі даних - викликаємо метод save. Метод повертає результат, об'єкт типу Document, який представляє конкретний документ що зберігається в колекції.
Індекси
Якщо поле будуть часто використовувати при пошуку документів, то йому можна призначити індекс. Індексування полів пришвидшує пошук. Індекс до поля можна додати двома способами.
Визначити у самій схемі
Викликати метод index у самій схемі
Унікальні поля
Значення поля можна зробити унікальним. Тобто, в інших документах колекції не може бути такого поля з таким же значенням. Наприклад, поле emaіl, для схеми, варто описати як унікальне. Для цього у схемі, вказують властивість unique
Обов'язкові поля
Деякі поля повинні бути обовʼязкові. для цього вказують властивість required. Опціонально можна вказати повідомлення, яке повернеться у випадку відсутності цього поля.
Методи в об'єкта схеми
У схемах можна створювати власні методи. Для цього використовують функцію Schema.methods. Всередині функції доступ до об'єкта схеми відбувається за посиланням this. Для прикладу створимо функцію, яка повертає повне ім'я користувача.
Отримавши екземпляр документа з бази, можна викликати функцію fullName() яка повертає повне ім'я та прізвище користувача.
Операції з даними в Mongoose
Створення документів
Крім згаданого методу save() можна використати метод від моделі об'єкта User.create(). Першим параметром методу передається об'єкт для збереження.
Отримання документів
Для отримання даних використовують метод find. Він повертає масив об'єктів типу документ:
Метод findOne повертає перший об'єкт документа, який збігається із запитом:
Видалення документів
Для видалення застосовуються метод remove. З колекції видаляються всі документи, що збігаються із запитом:
Метод findOneAndRemove видаляє з колекції перший документ, що збігається із запитом
Зміна полів в документі
Метод update оновлює в колекції всі документи, що збігаються із запитом:
Метод findOneAndUpdate оновлює в колекції перший документ, що збігається із запитом.
Покликання:
Last updated