Node.js dla początkujących - Część 15: Połączenie z bazą MongoDB

1/21/2025 Kurs JavaScript

Mateusz Kędziora

image

Witajcie, drodzy adepci programowania! W dzisiejszym wpisie zanurzymy się w fascynujący świat baz danych NoSQL, a konkretnie poznamy MongoDB i nauczymy się, jak łączyć go z naszym ulubionym środowiskiem uruchomieniowym JavaScript – Node.js. Przygotujcie się na solidną dawkę praktycznej wiedzy, okraszonej przykładami i prostymi ćwiczeniami.

Co to jest MongoDB i dlaczego warto go znać?

MongoDB to popularna, otwartoźródłowa baza danych NoSQL, która przechowuje dane w formacie JSON-podobnym, zwanym BSON (Binary JSON). W odróżnieniu od tradycyjnych baz relacyjnych (np. MySQL, PostgreSQL), MongoDB nie operuje na tabelach i relacjach, a na kolekcjach i dokumentach. To podejście oferuje większą elastyczność i skalowalność, co jest szczególnie istotne w dynamicznie rozwijających się aplikacjach webowych.

Kluczowe cechy MongoDB:

  • Elastyczny schemat: Nie musisz definiować sztywnej struktury danych z góry. Każdy dokument w kolekcji może mieć inny zestaw pól.
  • Skalowalność horyzontalna: MongoDB łatwo skaluje się w poziomie, co pozwala na obsługę dużych ilości danych i wysokiego ruchu.
  • Wydajność: Dzięki indeksom i optymalizacjom, MongoDB oferuje szybki dostęp do danych.
  • Łatwość użycia: Składnia zapytań jest intuicyjna i przypomina JavaScript.

Przygotowanie środowiska

Zanim zaczniemy kodować, upewnijmy się, że mamy zainstalowane niezbędne narzędzia:

  1. Node.js i yarn: Jeśli jeszcze ich nie masz, odsyłam Cię do poradnika instalacji Node.JS.
  2. MongoDB: Pobierz i zainstaluj MongoDB Community Server ze strony mongodb.com. Po instalacji upewnij się, że serwer MongoDB jest uruchomiony. Domyślnie działa on na porcie 27017. Możesz też użyć darmowej wersji chmurowej link do MongoDB Atlas

Instalacja sterownika MongoDB dla Node.js

Aby móc komunikować się z bazą danych MongoDB z poziomu Node.js, potrzebujemy odpowiedniego sterownika. Zainstalujemy go za pomocą npm:

yarn add mongodb

Nawiązywanie połączenia z bazą danych

Stwórzmy plik index.js i zacznijmy pisać kod. Na początek zaimportujmy moduł mongodb i nawiążmy połączenie z bazą danych:

const { MongoClient } = require('mongodb');

// URI połączenia. Zmienić nazwę bazy danych na własną, np. "mojaBaza"
const uri = 'mongodb://127.0.0.1:27017/mojaBaza';

const client = new MongoClient(uri);

async function connectToDatabase() {
  try {
    await client.connect();
    console.log('Połączono z bazą danych!');
    return client.db(); // Zwracamy obiekt bazy danych
  } catch (error) {
    console.error('Błąd połączenia:', error);
    process.exit(1); // Zamykamy proces w przypadku błędu
  }
}

async function main() {
  const db = await connectToDatabase();
  // Tutaj będziemy wykonywać operacje na bazie danych
}

main();

W powyższym kodzie:

  • Importujemy klasę MongoClient z modułu mongodb.
  • Definiujemy uri połączenia, który zawiera adres serwera MongoDB i nazwę bazy danych. Zmień mojaBaza na dowolną nazwę.
  • Tworzymy instancję klienta MongoClient.
  • Funkcja connectToDatabase asynchronicznie łączy się z bazą danych i zwraca obiekt bazy danych.
  • Funkcja main wywołuje funkcję connectToDatabase i będzie zawierać dalsze operacje na bazie danych.

Operacje CRUD (Create, Read, Update, Delete)

Teraz przejdziemy do najważniejszych operacji, które możemy wykonywać na bazie danych.

Dodawanie danych (Create)

Aby dodać dokument do kolekcji, używamy metody insertOne lub insertMany:

async function main() {
    const db = await connectToDatabase();
    const collection = db.collection('produkty'); // Wybieramy kolekcję "produkty"

    try {
        const result = await collection.insertOne({ nazwa: 'Laptop', cena: 2500, opis: 'Mocny laptop do pracy' });
        console.log(`Dodano dokument z ID: ${result.insertedId}`);

        const manyResult = await collection.insertMany([
            { nazwa: 'Myszka', cena: 50, opis: 'Bezprzewodowa myszka' },
            { nazwa: 'Klawiatura', cena: 150, opis: 'Ergonomiczna klawiatura' }
        ]);
        console.log(`Dodano ${manyResult.insertedCount} dokumentów.`);

    } catch (error) {
        console.error('Błąd dodawania dokumentu:', error);
    } finally {
        await client.close()
    }
}

Odczytywanie danych (Read)

Do odczytywania danych służy metoda find:

async function main() {
    const db = await connectToDatabase();
    const collection = db.collection('produkty');

    try {
        const produkty = await collection.find({ cena: { $gt: 100 } }).toArray(); // Znajdź produkty droższe niż 100 zł
        console.log('Produkty droższe niż 100 zł:', produkty);

        const wszystkieProdukty = await collection.find({}).toArray(); // Pobierz wszystkie produkty
        console.log('Wszystkie produkty:', wszystkieProdukty);
    } catch (error) {
        console.error('Błąd odczytu dokumentów:', error);
    } finally {
        await client.close()
    }
}

Używamy operatorów zapytań, takich jak $gt (greater than – większy niż), aby filtrować wyniki.

Aktualizowanie danych (Update)

Do aktualizacji dokumentów używamy metody updateOne lub updateMany:

async function main() {
    const db = await connectToDatabase();
    const collection = db.collection('produkty');
    try {
        const updateResult = await collection.updateOne({ nazwa: 'Laptop' }, { $set: { cena: 2700 } }); // Zaktualizuj cenę laptopa
        console.log(`Zaktualizowano ${updateResult.modifiedCount} dokumentów.`);
    } catch (error) {
        console.error('Błąd aktualizacji dokumentu:', error)
    } finally {
        await client.close()
    }
}

Używamy operatora $set, aby zmienić wartość pola.

Usuwanie danych (Delete)

Do usuwania dokumentów używamy metody deleteOne lub deleteMany:

async function main() {
    const db = await connectToDatabase();
    const collection = db.collection('produkty');
    try {
        const deleteResult = await collection.deleteOne({ nazwa: 'Myszka' }); // Usuń myszkę
        console.log(`Usunięto ${deleteResult.deletedCount} dokumentów.`);
    } catch (error) {
        console.error('Błąd usuwania dokumentu:', error)
    } finally {
        await client.close()
    }
}

Praca domowa

  1. Stwórz kolekcję “użytkownicy” z polami: imie, nazwisko, email i wiek.
  2. Dodaj kilka dokumentów do tej kolekcji.
  3. Napisz zapytanie, które znajdzie użytkowników starszych niż 25 lat.
  4. Zaktualizuj wiek jednego z użytkowników.
  5. Usuń użytkownika o określonym emailu.

Podsumowanie

W tym artykule poznaliśmy podstawy integracji Node.js z MongoDB. Nauczyliśmy się łączyć z bazą danych, dodawać, odczytywać, aktualizować i usuwać dane. Zachęcam Cię do dalszego eksperymentowania i odkrywania możliwości MongoDB. Pamiętaj, że praktyka czyni mistrza!

Polecane artykuły