W tej lekcji skupimy się na pełnym wdrożeniu operacji CRUD (Create, Read, Update, Delete) w MongoDB za pomocą JavaScript. W poprzedniej lekcji nauczyliśmy się, jak podłączyć się do bazy danych i dodać pierwszy dokument. Teraz zagłębimy się w bardziej zaawansowane operacje, wykonując w jednym kodzie dodawanie, odczytywanie, aktualizowanie oraz usuwanie danych. Wszystko to będzie zaimplementowane w ramach jednego przykładu, aby zrozumieć, jak działa komunikacja z MongoDB w Node.js.
Przykład kodu – Operacje CRUD w MongoDB
Otwórz swój projekt i utwórz nowy plik o nazwie crud.js
. Wprowadź poniższy kod i zwróć uwagę na komentarze, które wyjaśnią każdy krok i operację:
// Importujemy MongoClient z biblioteki mongodb, aby móc nawiązać połączenie z bazą danych
const { MongoClient } = require('mongodb');
// Ustawiamy URL połączenia do lokalnej instancji MongoDB
const url = 'mongodb://localhost:27017';
// Definiujemy nazwę bazy danych, z którą będziemy pracować
const dbName = 'myDatabase';
async function main() {
// Tworzymy nowego klienta MongoDB, podając mu URL do naszej bazy danych
const client = new MongoClient(url);
try {
// Nawiązujemy połączenie z serwerem MongoDB
await client.connect();
console.log('Połączono z MongoDB!');
// Uzyskujemy dostęp do bazy danych o nazwie "myDatabase"
const db = client.db(dbName);
// Uzyskujemy dostęp do kolekcji "users" (odpowiednik tabeli w relacyjnej bazie danych)
const collection = db.collection('users');
// --- CREATE: Dodawanie dokumentów do kolekcji ---
// Dodajemy jeden dokument do kolekcji "users"
const newUser = { name: 'Anna', age: 28, email: 'anna@example.com' };
const insertResult = await collection.insertOne(newUser);
console.log('Dodano dokument o ID:', insertResult.insertedId); // Wyświetlamy ID dodanego dokumentu
// Dodajemy wiele dokumentów jednocześnie
const users = [
{ name: 'Krzysztof', age: 34, email: 'krzysztof@example.com' },
{ name: 'Monika', age: 22, email: 'monika@example.com' },
{ name: 'Jan', age: 30, email: 'jan@example.com' }
];
const insertManyResult = await collection.insertMany(users);
console.log('Dodano dokumenty o ID:', insertManyResult.insertedIds); // Wyświetlamy ID dodanych dokumentów
// --- READ: Pobieranie dokumentów z kolekcji ---
// Znajdujemy jeden dokument, który ma pole "name" równe "Anna"
const user = await collection.findOne({ name: 'Anna' });
console.log('Znaleziony dokument:', user); // Wyświetlamy znaleziony dokument
// Znajdujemy wszystkie dokumenty, w których "age" jest większe niż 25
const usersOver25 = await collection.find({ age: { $gt: 25 } }).toArray();
console.log('Dokumenty z wiekiem powyżej 25 lat:', usersOver25); // Wyświetlamy tablicę znalezionych dokumentów
// --- UPDATE: Aktualizowanie dokumentów w kolekcji ---
// Aktualizujemy jeden dokument - ustawiamy nową wartość pola "age" dla dokumentu, w którym "name" to "Anna"
const updateResult = await collection.updateOne(
{ name: 'Anna' }, // Warunek, który określa, który dokument zaktualizować
{ $set: { age: 29 } } // Aktualizacja: ustawiamy pole "age" na 29
);
console.log('Liczba zaktualizowanych dokumentów:', updateResult.modifiedCount); // Wyświetlamy liczbę zaktualizowanych dokumentów
// Aktualizujemy wiele dokumentów jednocześnie - dodajemy nowe pole "ageGroup" dla wszystkich dokumentów, w których "age" jest mniejsze niż 30
const updateManyResult = await collection.updateMany(
{ age: { $lt: 30 } }, // Warunek: wszyscy użytkownicy, których "age" jest mniejsze niż 30
{ $set: { ageGroup: 'Młody' } } // Dodajemy pole "ageGroup" z wartością "Młody"
);
console.log('Liczba zaktualizowanych dokumentów:', updateManyResult.modifiedCount); // Wyświetlamy liczbę zaktualizowanych dokumentów
// --- DELETE: Usuwanie dokumentów z kolekcji ---
// Usuwamy jeden dokument - usuwa dokument, w którym "name" to "Anna"
const deleteResult = await collection.deleteOne({ name: 'Anna' });
console.log('Liczba usuniętych dokumentów:', deleteResult.deletedCount); // Wyświetlamy liczbę usuniętych dokumentów
// Usuwamy wiele dokumentów jednocześnie - usuwa wszystkie dokumenty, w których "age" jest mniejsze niż 25
const deleteManyResult = await collection.deleteMany({ age: { $lt: 25 } });
console.log('Liczba usuniętych dokumentów:', deleteManyResult.deletedCount); // Wyświetlamy liczbę usuniętych dokumentów
} catch (error) {
console.error('Błąd podczas operacji na bazie danych:', error); // Obsługa błędów, wyświetla komunikat błędu w konsoli
} finally {
// Zawsze zamykamy
Podsumowanie
W powyższym kodzie zaimplementowaliśmy pełny zestaw operacji CRUD w MongoDB za pomocą JavaScript:
- CREATE (Dodawanie): Użyliśmy
insertOne
iinsertMany
do dodawania pojedynczego i wielu dokumentów do kolekcji. - READ (Odczytywanie): Użyliśmy
findOne
do znalezienia jednego dokumentu orazfind
do pobrania wielu dokumentów na podstawie określonych kryteriów. - UPDATE (Aktualizowanie): Użyliśmy
updateOne
do aktualizacji jednego dokumentu iupdateMany
do aktualizacji wielu dokumentów jednocześnie. - DELETE (Usuwanie): Użyliśmy
deleteOne
do usunięcia pojedynczego dokumentu orazdeleteMany
do usunięcia wielu dokumentów spełniających określone kryteria.
Dzięki tym operacjom możemy zarządzać danymi w bazie MongoDB w sposób elastyczny i efektywny. W kolejnych lekcjach dowiemy się więcej o zaawansowanych funkcjach MongoDB, takich jak agregacje i indeksowanie, aby zoptymalizować i rozszerzyć możliwości aplikacji.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video JavaScript w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.