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

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:
- Node.js i yarn: Jeśli jeszcze ich nie masz, odsyłam Cię do poradnika instalacji Node.JS.
- 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łumongodb
. - 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
- Stwórz kolekcję “użytkownicy” z polami:
imie
,nazwisko
,email
iwiek
. - Dodaj kilka dokumentów do tej kolekcji.
- Napisz zapytanie, które znajdzie użytkowników starszych niż 25 lat.
- Zaktualizuj wiek jednego z użytkowników.
- 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
Docker vs Kubernetes: Który dla Ciebie w 2025?
Docker i Kubernetes objaśnione! Która technologia lepsza dla początkujących w 2025? Porównanie, przykłady i przyszłość.
Mateusz Kędziora
DevOps: Automatyzacja zadań sysadmina dla programistów
Zautomatyzuj pracę sysadmina w środowisku DevOps! Praktyczne przykłady, skrypty, Ansible, Terraform, Prometheus i Grafana.
Mateusz Kędziora
Automatyzacja Linux/macOS z Bash: Praktyczny Przewodnik
Zacznij automatyzować system Linux/macOS z Bash! Dowiedz się, czym jest Bash, jak pisać skrypty i używać podstawowych komend.
Mateusz Kędziora