Mongodb

Mis on mongoDB?

MongoDB on avatud lähtekoodiga NoSQL (Not Only SQL) andmebaas, mis talletab andmeid dokumentidena (ehk JSON-laadsetes BSON-formaadis objektides)

Mis on Kollektsioon Mongodb´es?

Kollektsioon MongoDB-s on analoogne tabelile relatsioonilises andmebaasis. See on dokumentide kogum, millel võib olla sarnane, kuid mitte üheselt määratud struktuur.

  • Üks andmebaas võib sisaldada mitmeid kollektsioone.
  • Dokumentide skeem kollektsioonis ei pea olema identne – iga dokument võib sisaldada erinevaid välju

Mis on Dokument Mongodb´es?

Dokument on MongoDB andmete põhiühik. See on key-value paaride struktuur, mis sarnaneb JSON-failile, kuid kasutatakse BSON-formaati

ALLIKAD:

Video: link

MongoDB Compass: link

MongoDB kasutatud käsud

show databases;

Näitab kõik failid andmebaasis

Tulemus:

use mongo

Vahetab aktiivsed andmebaasi – näeme, et ma vahetasin andmebaasi mongo

Tulemus:

db.createCollection("users")

loob uue kollektsiooni – näeme, et mina loon kolektsiooni minega users

Tulemus:

show collections

Näitab kõiki kollektsioone mis meil on

Tulemus:

db.dropDatabase()

Kustutab kogu aktiivse andmebaasi

Tulemus:

show dbs

Kuvab nimekirja kogust andmebaasist

Tulemus:

db.users.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)

lisab mitu dokumenti korraga andmebaasi aktiivse kollektsiooni nimega users

Tulemus:

db.users.find()

otsib ja tagastab kõik dokumendid aktiivse andmebaasi users kollektsioonist

Tulemus:

db.users.find({
  $or: [
    { name: "alex" },
    { age: { $gt: 25 } }
  ]
})

Otsime kasutajaid, kelle nimi on “alex” või vanus on suurem kui 25:

Tulemus:

db.users.find({ age: { $lte: 21 } })

Otsime kasutajaid, kelle vanus on väiksem või võrdne 21-ga

Tulemus:

db.users.find({ age: { $gt: 20 } })

Otsime kasutajaid, kelle vanus on suurem kui 20

db.users.find({ age: { $gte: 30 } })

Otsime kasutajaid, kelle vanus on suurem või võrdne 30-ga

Tulemus:

db.users.find({ name: { $ne: "MARTIN" } })

Otsime kasutajaid, kelle nimi ei ole “MARTIN”:

Tulemus:

db.users.find().sort({age: 1})

sorteerib kasvavas järjekorras

Tulemus:

db.users.find().sort({age: -1})

Sorteerib kahanevas järjekorras

Tulemus:

db.users.find().limit(2)

Näitab limiitiga ainult kaks

Tulemus:

db.users.updateOne(
  { name: "alex" },
  { $set: { age: 20 } }
)

$set võimaldab uuendada või lisada välja olemasolevas dokumendis

Näiteks: mul oli Alexil age: 19 muutsin ma age: 20

Tulemus:

db.users.updateMany(
    {},
    {$rename: {
        name: "fullname"
        }
    }
)

$rename annab sulle võimaluse muuta välja (välja võtme)

Näiteks: ma muutsin name => fullname

Tulemus:

db.users.deleteOne( {age: 30})

Kustutab ühe dokumendi kolektsioonist

Näiteks: ma kustutasin dokumendi kus oli age: 30

Tulemus:

db.users.bulkWrite([
  {
    insertOne: {
      document: { name: "XEOR-1", age: 67810 }
    }
  },
  {
    deleteOne: {
      filter: { name: "alex" }
    }
  }
])

bulkWrite() võtab argumendiks massiivi mitmest operatsioonist.

Esimene: insertOne — lisab uue dokumendi { name: "XEOR-1", age: 67810 }.

Teine: deleteOne — kustutab ühe dokumendi, mille name on "alex"

Tulemus:

MongoDB Cloud connection and select data:

Kõik baas oli võtnud: link

Projektis oli kasutatud: express, mongoose, dotenv, ejs

Projekti stuktuur:

Login page:

Sisse kirjetame oma Name, Email, Tel, Age

JavaScript
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Home Page</title>
</head>
<body>
    <div class="container">
        <h1>Welcome to our website!</h1>
        <p>This is a simple form to save user data to the database.</p>
        <form id="userForm" action="/user" method="post" onsubmit="return validateForm()">
            <label for="name">Name:</label>
            <input type="text" id="name" name="name" >
            <label for="email">Email Id:</label>
            <input type="email" id="email" name="email" >
            <label for="mobile">Mobile No:</label>
            <input type="tel" id="mobile" name="mobile">
            <label for="age">Age:</label>
            <input type="number" id="age" name="age" >
            <button type="submit">Submit</button>
        </form>
        <% if (message) { %>
            <p class="message"><%= message %></p>
        <% } else if (error) { %>
            <p class="error"><%= error %></p>
        <% } %>
    </div>

    <script>
        function validateForm() {
            var name = document.getElementById("name").value;
            var email = document.getElementById("email").value;
            var mobile = document.getElementById("mobile").value;
            var age = document.getElementById("age").value;

            if (name === "" || email === "" || mobile === "" || age === "") {
                alert("Please fill out all fields.");
                return false;
            }
            return true;
        }
    </script>
</body>
</html>

päras kui me vajutame nuppu Submit siis me läheme lehele users kus kõik kasutajad saame vaadata

JavaScript
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Users List</title>
</head>
<body>
    <h1>User List</h1>
    <table>
        <thead>
            <tr>
                <th>Name</th>
                <th>Email</th>
                <th>Phone</th>
                <th>Age</th>
            </tr>
        </thead>
        <tbody>
            <% users.forEach(function(user) { %>
                <tr>
                    <td><%= user.name %></td>
                    <td><%= user.email %></td>
                    <td><%= user.mobile %></td>
                    <td><%= user.age %></td>
                </tr>
            <% }) %>
        </tbody>
    </table>
    <a href="/">Назад</a>
</body>
</html>

Andmebaasis see väljanäeb niimoodi

Server.js

JavaScript
const express = require('express');
const connectDB = require('./database/db');
const userRoutes = require('./routes/userRoutes');
const User = require('./model/model')

const app = express();
const port = 3000;

connectDB();

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.set('view engine', 'ejs');
app.set('views', './views');

app.use('/', userRoutes);

app.get('/users', async (req, res) => {
    const users = await User.find(); 
    res.render('users', { users }); 
});


app.listen(port, (err) => {
  if (err) {
    console.log(err);
  } else {
    console.log(`Server is started at port ${port}`);
  }
});

db.js

JavaScript
const mongoose = require('mongoose');
require('dotenv').config();

const url = process.env.MONGODB_URI;
const connectDB = async () => {
    try {
        await mongoose.connect(url, {
           
        });
        console.log('Database is connected');
    } catch (err) {
        console.error('Error connecting to the database:', err);
        process.exit(1);
    }
};

module.exports = connectDB;

UserRoute.js

JavaScript
const express = require('express');
const User = require('../model/model');
const router = express.Router();

router.get('/', async (req, res) => {
  try {
    const users = await User.find();
    res.render('index', { message: null, error: null, users });
  } catch (err) {
    console.error('Error fetching user data:', err);
    res.status(500).render('index', { error: 'Error fetching user data', users: [] });
  }
});

router.post('/user', async (req, res) => {
  try {
    const newUser = new User({
      name: req.body.name,
      email: req.body.email,
      mobile: req.body.mobile,
      age: req.body.age,
    });
    await newUser.save();
    res.redirect('/users');  
  } catch (err) {
    console.error('Error saving user data:', err);
    res.status(500).render('index', { error: 'Error saving user data', message: null, users: [] });
  }
});

module.exports = router;

Minu zone.ee: Link