РОБОТА З БАЗАМИ ДАНИХ MONGOOSE
В якості бази даних я вибрала об'єктно-реляційну БД (ORM) MongoDB, так як її структура подібна структурі об'єктів Java Script, а також є можливість безкоштовно завантажувати обмежену кількість даних в MongoDB в інтернеті, таким чином забезпечивши цілодобовий доступ через мережу Internet.
Mongoose же призначений для асинхронної роботи із MongoDB, т.е. у разі необхідності виконувати декілька запитів паралельно.
Порядок налаштування доступу до БД
1. (Якщо ще не встановлено), скачати і встановити Node.js на комп'ютер.
2. npm init -y (Якщо ще не створено), створити новий проект (команда терміналу)
3. npm install mongoose - ввести в терміналі, щоб встановити бібліотеки в каталог проекту node_modules
4. import mongoose from 'mongoose'; const { Collection } = mongoose; - імпорт в файл index.js
5. mongoose.connect(db_url); - підключення до бази даних за посиланням, що знаходиться у змінній db_url
Створення нового користувача (тип об'єкту Map зручний, якщо будуть змінюватися значення як ключів key так і їх значень value)
6. const userSchema = new mongoose.Schema({ list: { type: Map, of: new mongoose.Schema({ username: { type: String, required: true }, permissions: { type: String, default: 'User', enum: ['Admin', 'User', 'Banned'],}, coins: {type: Number, default: 0}, games: [String] }) } }); - створення схеми userSchema: назви полів і формати їх значень
7. let userModel = mongoose.model("users", userSchema); - створення моделі userModel: присвоєння колекції users схеми userSchema
let userModel = mongoose.model('users', new mongoose.Schema({}, {strict: false})); - створення моделі без конкретної схеми, щоб у неї можна було записувати будь-які поля
! await userModel.deleteMany({}); - якщо в БД уже існує колекція "users", але з іншою схемою, то її спочатку необхідно видалити, інакше буде неможливо записати дані за новою схемою
8. const addUserToList = async (ID, uName, permiss, Coins, Games) => { try { let newUser = { username: uName, permissions: permiss, coins: Coins, games: Games } let userList = await userModel.findOne(); if (!userList) userList = new userModel({ list: {} }); userList.list.set(ID, newUser); await userList.save(); } catch (err) {console.log(err);} }; addUserToList('id0003', 'name3', 'Banned'); let userList = await userModel.findOne(); console.log(userList); - створення нового користувача в колекції userList
✅ Необов’язкові поля можна не вказувати – вони будуть undefined.
✅ Якщо є default, то буде використане значення за замовчуванням.
❌ Якщо поле required: true і не передано, буде помилка.
Інші функції mongoose
find();
Подивитися текст коду
const getUsers = async () => { try { const users = await userModel.find(); console.log('Список користувачів:', users); } catch (error) {console.error(error);} }; getUsers();
- отримання всіх користувачів
findOne();
Подивитися текст коду
const getUserId = async (userId) => { try { const userList = await userModel.findOne(); const user = userList.list.get(userId); console.log("Знайдено користувача:", user); return user; } catch (error) {console.error(error);} }; getUserId('id0001');
- знайти користувача за Id
delete(key);
Подивитися текст коду
const removeUserFromList = async (userId) => { try { const userList = await userModel.findOne(); userList.list.delete(userId); await userList.save(); console.log(`Користувач ${userId} видалений`); console.log(userList); } catch (error) {console.error(error);} }; removeUserFromList('id0003');
- видалити користувача за Id
collection(name);
Подивитися текст коду
const findCollection = async(collectionName) => { try { const userCollection = mongoose.connection.db.collection(collectionName); const users = await userCollection.find({}).toArray(); console.log(users); } catch (error) {console.error(error);} } findCollection('users');
- отримати колекцію без визначення схеми
важливо, щоб до виконання даної функції БД встигла завантажитися,
якщо БД не встигає завантажитися, то необхідно огорнути mongoose.connect(db_url) в асинхронну функцію
_id: ObjectId(...XXX...) ▼ list: Object ▼ id0001: Object username: "user1" permissions: "Admin" coins: 300 ▼ games: Array (2) 0: "Starcraft" 1: "Frostpunk" ▼ id0002: Object username: "user2" permissions: "User" coins: 200 ▼ games: Array (1) 0: "Mass Effekt"
Консоль: