Tartalomjegyzék

< Express

Express - MongoDB adatbázis

Szerver

Windows Chocolatey

choco install mongodb

A szerver automatikusan elindul.

Ellenőrzés:

sc query
sc query | more
sc query mongodb

Linuxon

Végezzük el az előkészületeket a weboldal szerint:

apt install mongodb-org
systemctl status mondgod

Kliens

Linuxon:

mongo

Docker

Töltsük le a képfájlt:

docker pull mongodb/mongodb-community-server

Indítsunk belőle konténert:

docker run --name mongo -d mongodb/mongodb-community-server:latest

Futó konténerek kezelése:

docker container ls

Kapcsolódás a szerverhez:

docker exec -it mongo mongosh

Függőségek

A Mongoose egy dokumentum leképező rendszer, egy ODM azaz Object-Document Mapping.

pnpm install mongoose

Dolgozók adatbázisban

app/models/database.js
const mongoose = require('mongoose');
 
const conString = 'mongodb://127.0.0.1:27017/emp';
mongoose.connect(conString);
 
const employeeSchema = new mongoose.Schema({
    name: { type: String, required: true },
    city: { type: String, required: true },
    salary: { type: Number, required: true }
});
 
const Employee = mongoose.model('Employee', employeeSchema);
 
module.exports = {
    Employee
};
app/controllers/employeecontrollers.js
const { Employee } = require('../models/database');
//...
 
    async store(req, res) {
        console.log(req.body);
        if(!req.body.name) {
            res.status(400);
            res.json({ 
                success: false, 
                message: 'Bad request'
            });
        }
        const newEmployee = new Employee(req.body);
        const insertedEmployee = await newEmployee.save();
        res.status(201)
        res.json({
            success: true,
            message: insertedEmployee
        });
    },

A newEmployee.save() utasítást muszáj await előtaggal, mert másként nem kapjuk meg a beszúrt adatokat.

Ellenőrzés

Küldjünk egy HTTP klienssel egy felhasználót:

http post localhost:8000/api/employees 
name='aaaa' city='Szeged' salary=357

Indítsuk el a MongoDB Shell-t:

mongo

Megnézhetjük a létező adatbázisokat:

> show dbs

Kapcsolódjunk az emp adatbázishoz:

> use emp

Nézzük meg milyen kollekcióink vannak:

> show collections

A modellek kollekciókra képződnek le.

> db.employee.find()

A kimenet ehhez hasonló kell legyen:

{ "_id" : ObjectId("647ca006579fd6808558cfa7"), 
"name" : "aaaa", "city" : "Szeged", 
"salary" : 357, "__v" : 0 }

Dolgozók lekérdezése

app/controllers/employeecontrollers.js
    async index(req, res) {
        const allEmployees = await Employee.find();
        res.json({ 
            success: true,
            data: allEmployees,
            message: 'Ok'
        });
    },

Dolgozó törlése

src/controllers/employeecontrollers.js
    async delete(req, res) {
        if(!req.params.id) {
            res.status(400);
            res.json({ 
                success: false, 
                message: 'Bad request'
            });
        }
        const id = req.params.id;
        const deletedEmployee = await Employee.findByIdAndDelete(id);
        res.status(200);
        res.json({
            success: true,
            data: deletedEmployee,
            message: 'Ok'
        });
    },

Dolgozó módosítása

app/controllers/employeecontrollers.js
    async update(req, res) {
        if(!req.params.id || !req.body.name) {
            res.status(400);
            res.json({
                success: false,
                message: 'Bad request'
            });
        }
 
        const _id = req.params.id;
 
        await Employee.updateOne({ _id }, req.body);
        const updatedEmployee = await Employee.findById(_id);
        res.status(200);
        res.json({
            success: true,
            body: updatedEmployee,
            message: 'Ok'
        });
    }

Felhasználó

app/models/database.js
const mongoose = require('mongoose');
 
const conString = 'mongodb://127.0.0.1:27017/emp';
mongoose.connect(conString);
 
const employeeSchema = new mongoose.Schema({
    name: { type: String, required: true },
    city: { type: String, required: true },
    salary: { type: Number, required: true }
});
 
const userSchema = new mongoose.Schema({
    username: { type: String, required: true },
    email: { type: String, required: true },
    password: { type: String, required: true },
});
 
const Employee = mongoose.model('Employee', employeeSchema);
const User = mongoose.model('User', userSchema);
 
module.exports = {
    Employee,
    User
};

Linkek