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

<!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

<!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
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
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
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