en_USet

MongoDB

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)

  1. Kollektsioon MongoDB-s on dokumentide kogum, mis sarnaneb SQL-tabeliga, kuid millel puudub kindel skeem.
  2. Kõik kollektsioon dokumendid võivad olla erineva struktuuriga, kuigi tavaliselt püütakse säilitada sarnaseid andmeid.
  3. Näide: kollektsioon users võib säilitada teavet kasutajate kohta.

Dokument

  1. Dokument on üks andmeobjekt MongoDB-s, mis on esitatud JSON-vormingus (täpsemalt BSON-vormingus).
  2. Dokument sisaldab võti-väärtuse paare.
  3. Näide dokumendist kogus users:

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

Andmebaaside loomine, kustutamine ja kasutamine

  1. Loomine
  1. show databases; – Näitab kõigi MongoDB serveris olevate andmebaaside loetelu.
  2. 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:

  1. Ühenduse loomine serveriga
  2. Andmebaasi objekti hankimine serverist
  3. Kogumiku objekti hankimine andmebaasist
  4. 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:

  1. Uue kasutaja lisamine – vormi kaudu saab märkida nime, vanuse, e-posti aadressi ja telefoni numbri, seejärel saadetakse andmed serverisse ja salvestatakse andmebaasi.
  2. Kasutaja kustutamine – iga kasutaja kõrval on nupp „Kustuta”, mis kustutab valitud kasutaja andmebaasist.
  3. Kasutaja muutmine – nupuga „Muuda” saab kasutaja andmeid muuta hüpikakende kaudu.