Майстерність у MongoDB та Mongoose в Node.js: Повний посібник

У сучасній веб-розробці часто обирають поєднання Node.js та MongoDB для створення швидких, масштабованих і гнучких бекенд-застосунків. Коли ви працюєте над розробкою бекенду, важливо вміти ефективно взаємодіяти з базою даних, щоб створювати надійні й ефективні додатки.

В цьому посібнику ми розглянемо два потужні інструменти — MongoDB та Mongoose, які роблять роботу з базами даних у Node.js простішою та інтуїтивною. Ми розберемо обидва підходи, надамо реальні приклади та допоможемо визначити, який з них вам підходить.

MongoDB — це NoSQL база даних, яка зберігає дані у вигляді документів (формат JSON), на відміну від традиційних реляційних баз, що використовують таблиці. Данні зберігаються в колекціях, що робить MongoDB зручною для роботи з неструктурованими або напівструктурованими даними.

Основні переваги MongoDB:

  • Гнучкість схеми: дані можна зберігати в будь-якому форматі без попередньо визначених схем.
  • Масштабованість: MongoDB можна легко масштабувати горизонтально, щоб обробляти великий трафік і великі обсяги даних.
  • Продуктивність: MongoDB розроблена для високої продуктивності, ефективно працюючи з додатками великого масштабу.

Існує два основні способи роботи з MongoDB в Node.js: через нативний драйвер MongoDB або через бібліотеку Mongoose.

  1. Нативний драйвер MongoDB — це офіційний низькорівневий API для взаємодії з MongoDB з Node.js, що надає повний контроль над операціями, але вимагає самостійної обробки всіх аспектів взаємодії, включаючи запити і валідацію.

Щоб налаштувати нативний драйвер, спершу потрібно встановити клієнт MongoDB в проект:

npm install mongodb

Далі налаштовуємо підключення:

import { MongoClient } from 'mongodb';

const url = "mongodb://localhost:27017";
const dbname = "mydb";const client = new MongoClient(url);const db = async () => {
await client.connect();
console.log("Підключено до MongoDB");
return client.db(dbname);
};export default db;

Після цього можна визначити маршрут в Express.js для обробки операцій CRUD, таких як додавання, оновлення, отримання та видалення користувачів.

  1. Mongoose — це бібліотека для об'єктно-орієнтованого моделювання даних (ODM) для MongoDB, яка забезпечує структуровану взаємодію з базою даних через схеми. Вона спрощує визначення структур даних, валідацію та роботу з взаємозв'язками.

Щоб використовувати Mongoose, потрібно встановити бібліотеку:

npm install mongoose

Далі налаштовуємо підключення:

import mongoose from "mongoose";

const url = 'mongodb://localhost:27017/mydatabase';const connectDB = async () => {
await mongoose.connect(url, { useNewUrlParser: true, useUnifiedTopology: true });
console.log('MongoDB підключено успішно');
};export default connectDB;

Один з ключових моментів у роботі з Mongoose — це можливість створення схем для ваших даних. Наприклад, для користувача ми можемо визначити схему таким чином:

import mongoose from "mongoose";

const userSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true, unique: true },
password: { type: String, required: true },
age: { type: Number, required: true }
});const User = mongoose.model('User', userSchema);
export default User;

Далі, використовуючи Mongoose, ми можемо обробляти операції CRUD:

import express from 'express';
import User from './userModel.js';

const route = express.Router();// Отримати всіх користувачів
route.get('/users', async (req, res) => {
let users = await User.find();
res.json(users);
});// Додати нового користувача
route.post('/users', async (req, res) => {
let newUser = new User(req.body);
let result = await newUser.save();
res.status(201).json(result);
});// Отримати користувача за ID
route.get('/users/:id', async (req, res) => {
let user = await User.findById(req.params.id);
if (!user) return res.status(404).send('Користувача не знайдено');
res.status(200).json(user);
});// Оновити користувача
route.put('/users/:id', async (req, res) => {
let updatedUser = await User.findByIdAndUpdate(req.params.id, req.body, { new: true });
res.status(200).json(updatedUser);
});// Видалити користувача
route.delete('/users/:id', async (req, res) => {
let deletedUser = await User.findByIdAndDelete(req.params.id);
res.status(200).json(deletedUser);
});export default route;

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

Коли обирати нативний драйвер MongoDB? Якщо вам потрібен повний контроль над взаємодією з базою даних, ви не потребуєте складних схем і валідації, або ви створюєте малий проект.

Коли обирати Mongoose? Якщо ви хочете працювати з чіткими схемами, вам потрібна валідація даних, проміжне програмне забезпечення або складні запити.

Вибір між MongoDB Native Driver і Mongoose залежить від ваших вимог та переваг у розробці. Обидва варіанти є чудовими для забезпечення вашого Node.js додатку гнучкою та масштабованою базою даних.

Перекладено з: Mastering MongoDB and Mongoose in Node.js: A Complete Guide