MongoDB

1. Регистрация и настройка MongoDB Atlas

1.1 Регистрация на MongoDB Atlas

  • Перейдите на MongoDB Atlas и зарегистрируйтесь.
  • Создайте новый кластер:
    • Выберите бесплатный план (Shared Cluster).
    • Установите настройки региона кластера в зависимости от вашего местоположения.

1.2 Создание базы данных и коллекции

  • В панели управления Atlas выберите созданный кластер.
  • Перейдите в раздел Database Access и добавьте нового пользователя:
    • Установите имя пользователя и пароль.
    • Выберите права доступа: Read and Write to any database.
  • В разделе Network Access добавьте IP-адрес:
    • Для локальной разработки можно добавить доступ с любого IP (0.0.0.0/0).
  • Перейдите в раздел Database -> Browse Collections:
    • Создайте новую базу данных, например, games-api, и первую коллекцию, например, games.

1.3 Получение строки подключения

  • В разделе Clusters нажмите кнопку Connect для вашего кластера.
  • Выберите Connect your application.
  • Скопируйте строку подключения вида:
const uri = 'mongodb+srv://oleksandrbohatyrov:oleksandrbohatyrov@cluster0.crul0.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0'

2. Подключение MongoDB в проекте с использованием Mongoose

2.1 Установка Mongoose

  • Установите Mongoose через npm:
npm install mongoose
Структура проекта

2.2 Создание подключения к MongoDB

  • В основном серверном файле (index.js), подключите Mongoose к вашему кластеру MongoDB Atlas.
const mongoose = require('mongoose');

const uri = 'mongodb+srv://oleksandrbohatyrov:oleksandrbohatyrov@cluster0.crul0.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0'


mongoose.connect(uri, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
})
    .then(() => console.log('Connected to MongoDB Atlas'))
    .catch((error) => console.error('Error connecting to MongoDB Atlas:', error));
  • Замените <username>, <password> и <dbname> на ваши значения из строки подключения, которую вы получили в MongoDB Atlas.

3. Создание модели с помощью Mongoose

3.1 Создание схемы для модели

  • Создайте папку models в проекте.
  • Внутри папки models создайте файл game.js.
Пример схемы Mongoose:
const mongoose = require('mongoose');

// Определение схемы для игр
const gameSchema = new mongoose.Schema({
    id: {
        type: Number,
        required: true,
        unique: true
    },
    name: {
        type: String,
        required: true
    },
    price: {
        type: Number,
        required: true
    }
});

// Создание модели на основе схемы
module.exports = mongoose.model('Game', gameSchema);

4. Создание API для работы с данными MongoDB

4.1 Маршрут для получения всех записей

В основном серверном файле добавьте маршрут для получения всех игр:

app.get('/games', async (req, res) => {
    try {
        const games = await Game.find();
        res.json(games);
    } catch (error) {
        res.status(500).json({ message: error.message });
    }
});

4.2 Маршрут для добавления новой игры

Добавьте возможность создавать новые записи:

app.post('/games', async (req, res) => {
    try {
        const lastGame = await Game.findOne().sort({ id: -1 });
        const newId = lastGame ? lastGame.id + 1 : 1;

        const game = new Game({
            id: newId,
            name: req.body.name,
            price: req.body.price
        });

        const newGame = await game.save();
        res.status(201).json(newGame);
    } catch (error) {
        res.status(400).json({ message: error.message });
    }
});

4.3 Маршрут для обновления записи

Для обновления записи используйте следующий маршрут:

app.put('/games/:id', async (req, res) => {
    try {
        const game = await Game.findOne({ id: req.params.id });
        if (!game) return res.status(404).json({ message: 'Game not found' });

        game.name = req.body.name || game.name;
        game.price = req.body.price || game.price;

        const updatedGame = await game.save();
        res.json(updatedGame);
    } catch (error) {
        res.status(400).json({ message: error.message });
    }
});

4.4 Маршрут для удаления записи

Для удаления записи по id:

app.delete('/games/:id', async (req, res) => {
    try {
        const game = await Game.findOne({ id: req.params.id });
        if (!game) return res.status(404).json({ message: 'Game not found' });

        await game.remove();
        res.json({ message: 'Game deleted' });
    } catch (error) {
        res.status(500).json({ message: error.message });
    }
});

5. Запуск проекта

node .