MongoDB on dokumendipõhine andmebaaside haldamise süsteem, mis salvestab andmeid JSON-dokumentidena. Selle tööpõhimõte põhineb dokumentide ja kogude kontseptsioonidel. MongoDB suudab salvestada mitut andmebaasi ning tagab kõrge jõudluse, skaleeritavuse ja redundantsuse.
MongoDB Community Edition – https://www.mongodb.com/products/self-managed/community-edition
Compass. The GUI for MongoDB (graafiline töörist)- https://www.mongodb.com/products/tools/compass
Kollektsioon(Collection)
- Kollektsioon MongoDB-s on dokumentide kogum, mis sarnaneb SQL-tabeliga, kuid millel puudub kindel skeem.
- Kõik kollektsioon dokumendid võivad olla erineva struktuuriga, kuigi tavaliselt püütakse säilitada sarnaseid andmeid.
- Näide: kollektsioon users võib säilitada teavet kasutajate kohta.
Dokument
- Dokument on üks andmeobjekt MongoDB-s, mis on esitatud JSON-vormingus (täpsemalt BSON-vormingus).
- Dokument sisaldab võti-väärtuse paare.
- Näide dokumendist kogus users:

4. _id — dokumendi unikaalne identifikaator (MongoDB loob selle automaatselt)

Andmebaaside loomine, kustutamine ja kasutamine
- Loomine

- show databases; – Näitab kõigi MongoDB serveris olevate andmebaaside loetelu.
- use mongo – Lülitub andmebaasile nimega mongo.


2. Kustutamine


3. Andmete lisamine

4. Dokumentide otsimine kogust

Otsing kriteeriumide järgi
- Otsing vanuse järgi

- Otsing vanuse ja nime järgi

- Otsing kahe kriteeriumi järgi vanuse või nime järgi

- Otsida kasutajat vanuse järgi alla 20 (lt – less than)

- Kasutaja otsing vanuse järgi alla 19-aastased (lte – less than or equal)

- Kasutaja otsing vanuse järgi üle 20 (gt – greater than )

- Kasutaja otsing vanuse järgi üle või võrdne 20 (gte – greater than equals to)

- Otsida kasutajat vanuse järgi, mis ei ole 20 (ne – not equal)

Sorteerimine
- Otsene järjekord (1)

- Vastupidises järjekorras (-1)

Koguse piirang

- Otsing IDjärgi

- Ühe kasutaja otsimine vanuse järgi

Uuendus

- Välja ümber nimetada

Kustuta

Mitmekordne päring (lisamine, kustutamine ja uuendamine)


Suhete tüübid
связь один ко многим



- Otsing postituse järgi

- Kasutaja otsimine, kellel on postitused

Mongo ühendamine Node js-iga
MongoDB-ga ühenduse loomisel ja sellega suhtlemisel võib eristada järgmisi etappe:
- Ühenduse loomine serveriga
- Andmebaasi objekti hankimine serverist
- Kogumiku objekti hankimine andmebaasist
- Kogumikuga suhtlemine (andmete lisamine, kustutamine, hankimine, muutmine)
Clusteri ühenduse seadistamine MongoDB Atlase veebisaidil, sealhulgas IP-aadressi lisamine, andmebaasi kasutaja loomine ja rakenduse ühendusstringi saamine.



Käsurealt/terminalis paigalda pakett mongodb:

Ühendusrea elemendid:
- Esiteks on protokoll (mongodb+srv://).
- Kui serverile on juurdepääs piiratud kasutajanime ja parooliga, märgitakse kasutajanimi ja parool („user:password“).
- Seejärel märgitakse host (cluster0.2qhtjht.mongodb.net).
- Pärast kaldkriipsu on andmebaasi nimi (/mongo).
- Pärast küsimärki on täiendavad ühendusparameetrid (?retryWrites=true&w=majority).



Index.js
const express = require("express");
const { MongoClient, ObjectId } = require("mongodb");
const cors = require("cors");
const path = require("path");
require("dotenv").config();
const app = express();
app.use(express.json());
app.use(cors());
app.use(express.static(path.join(__dirname, "public")));
const client = new MongoClient(
process.env.MONGO_URI || "mongodb+srv://daria:12345@cluster0.2qhtjht.mongodb.net/mongo?retryWrites=true&w=majority"
);
let users;
async function start() {
try {
await client.connect();
console.log("Connected to MongoDB");
const db = client.db("mongo");
users = db.collection("users");
app.get("/users", async (req, res) => {
const allUsers = await users.find().toArray();
res.json(allUsers);
});
app.post("/users", async (req, res) => {
try {
const newUser = req.body;
await users.insertOne(newUser);
res.json(newUser);
} catch (err) {
res.status(500).json({ error: "Failed to add user" });
}
});
app.put("/users/:id", async (req, res) => {
try {
const { id } = req.params;
const update = req.body;
await users.updateOne({ _id: new ObjectId(id) }, { $set: update });
res.json({ message: "User updated" });
} catch (err) {
res.status(400).json({ error: "Vigane ID või andmed" });
}
});
app.delete("/users/:id", async (req, res) => {
try {
const { id } = req.params;
await users.deleteOne({ _id: new ObjectId(id) });
res.json({ message: "User deleted" });
} catch (err) {
res.status(400).json({ error: "Vigane ID" });
}
});
app.listen(3000, () => console.log("http://localhost:3000"));
} catch (e) {
console.error("Error starting server:", e);
}
}
start();
public/index.html
<!DOCTYPE html>
<html lang="et">
<head>
<meta charset="UTF-8">
<title>MongoDB + Node.js CRUD</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header>
<h1>Kasutajate loend</h1>
</header>
<main>
<ul id="userList" class="user-list"></ul>
<div class="lisamine">
<h2>Lisa kasutaja</h2>
<form onsubmit="event.preventDefault(); addUser();">
<label for="name">Nimi:</label>
<input id="name" placeholder="Sisesta nimi">
<label for="age">Vanus:</label>
<input id="age" type="number" placeholder="Sisesta vanus">
<label for="email">Email:</label>
<input id="email" type="email" placeholder="Sisesta email">
<label for="phone">Telefon:</label>
<input id="phone" type="text" placeholder="Sisesta telefon">
<input type="submit" value="Lisa">
</form>
</div>
</main>
<footer>
<p>Daria Halchenko ©2025</p>
</footer>
<script>
const apiUrl = "/users";
async function loadUsers() {
const res = await fetch(apiUrl);
const users = await res.json();
const list = document.getElementById("userList");
list.innerHTML = "";
users.forEach(u => {
const li = document.createElement("li");
li.innerHTML = `
<div class="user-data">
<div><strong>Nimi:</strong> ${u.name}</div>
<div><strong>Vanus:</strong> ${u.age} aastat</div>
<div><strong>Email:</strong> ${u.email || "-"}</div>
<div><strong>Telefon:</strong> ${u.phone || "-"}</div>
</div>
<div class="user-actions">
<button onclick="deleteUser('${u._id}')">Kustuta</button>
<button onclick="updateUser('${u._id}')">Muuda</button>
</div>
`;
list.appendChild(li);
});
}
async function addUser() {
const name = document.getElementById("name").value.trim();
const age = document.getElementById("age").value;
const email = document.getElementById("email").value.trim();
const phone = document.getElementById("phone").value.trim();
if (!name || !age || !email || !phone) return alert("Palun täida kõik väljad!");
await fetch(apiUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ name, age: parseInt(age), email, phone })
});
document.getElementById("name").value = "";
document.getElementById("age").value = "";
document.getElementById("email").value = "";
document.getElementById("phone").value = "";
loadUsers();
}
async function deleteUser(id) {
if (!confirm("Kas oled kindel, et soovid kustutada?")) return;
await fetch(`${apiUrl}/${id}`, { method: "DELETE" });
loadUsers();
}
async function updateUser(id) {
const newName = prompt("Sisesta uus nimi:");
const newAge = prompt("Sisesta uus vanus:");
const newEmail = prompt("Sisesta uus email:");
const newPhone = prompt("Sisesta uus telefon:");
if (!newName || !newAge || !newEmail || !newPhone) return;
await fetch(`${apiUrl}/${id}`, {
method: "PUT",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
name: newName,
age: parseInt(newAge),
email: newEmail,
phone: newPhone
})
});
loadUsers();
}
loadUsers();
</script>
</body>
</html>

Sellel lehel on rakendatud lihtne veebiliides kasutajate andmebaasi haldamiseks Node.js ja MongoDB kaudu. Peamised võimalused:
- Uue kasutaja lisamine – vormi kaudu saab märkida nime, vanuse, e-posti aadressi ja telefoni numbri, seejärel saadetakse andmed serverisse ja salvestatakse andmebaasi.
- Kasutaja kustutamine – iga kasutaja kõrval on nupp „Kustuta”, mis kustutab valitud kasutaja andmebaasist.
- Kasutaja muutmine – nupuga „Muuda” saab kasutaja andmeid muuta hüpikakende kaudu.


