Obiettivi della lezione:
- Comprendere i concetti fondamentali dei database NoSQL. Gli studenti impareranno a identificare i tipi di database NoSQL e le loro caratteristiche principali.
- Analizzare MongoDB come esempio di database documentale. Gli studenti acquisiranno conoscenze su MongoDB, comprendendo la sua architettura, le operazioni principali e i casi d’uso.
- Implementare operazioni CRUD in MongoDB utilizzando JavaScript. Gli studenti apprenderanno come interagire con MongoDB attraverso operazioni di creazione, lettura, aggiornamento e cancellazione dei dati.
Introduzione ai database NoSQL
I database NoSQL (Not Only SQL) sono progettati per gestire grandi quantità di dati non strutturati o semi-strutturati, offrendo una maggiore scalabilità e flessibilità rispetto ai tradizionali database relazionali (SQL). Esistono diversi tipi di database NoSQL, ciascuno ottimizzato per specifici casi d’uso:
Tipi di database NoSQL
- Database documentali: Memorizzano i dati in documenti simili a JSON (ad esempio, MongoDB, CouchDB).
- Database a colonne: Organizzano i dati in colonne piuttosto che in righe (ad esempio, Cassandra, HBase).
- Database a grafo: Utilizzano nodi, bordi e proprietà per rappresentare e memorizzare i dati (ad esempio, Neo4j, ArangoDB).
- Database key-value: Memorizzano i dati come coppie chiave-valore (ad esempio, Redis, Riak).
MongoDB: Un database documentale
MongoDB è un popolare database NoSQL documentale che memorizza i dati in documenti BSON (Binary JSON). È progettato per essere scalabile, flessibile e ad alte prestazioni.
Caratteristiche principali di MongoDB
- Schema flessibile: MongoDB consente di memorizzare documenti con schemi diversi nella stessa raccolta, offrendo una grande flessibilità nella gestione dei dati.
- Scalabilità orizzontale: Supporta il sharding, permettendo di distribuire i dati su più server per migliorare le prestazioni e la capacità di archiviazione.
- Alta disponibilità: Utilizza la replica per garantire la disponibilità dei dati e la tolleranza ai guasti.
- Interfaccia JSON-like: I dati sono memorizzati in un formato JSON-like, che è facile da leggere e manipolare.
Architettura di MongoDB
- Database: Una collezione di raccolte (collections).
- Collection: Un gruppo di documenti.
- Document: Un insieme di campi e valori, simile a un oggetto JSON.
Installazione e configurazione di MongoDB
- Installazione su Linux (esempio con Ubuntu):
sudo apt update
sudo apt install -y mongodb
- Avvio del servizio MongoDB:
sudo systemctl start mongodb
- Verifica dell’installazione:
mongo --eval 'db.runCommand({ connectionStatus: 1 })'
Operazioni CRUD in MongoDB
Connessione a MongoDB
Per interagire con MongoDB utilizzando JavaScript, utilizziamo il driver ufficiale di MongoDB per Node.js.
- Installazione del driver MongoDB per Node.js:
npm install mongodb
- Codice di esempio per la connessione a MongoDB:
const { MongoClient } = require('mongodb');
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
async function run() {
try {
await client.connect();
console.log("Connesso a MongoDB");
} finally {
await client.close();
}
}
run().catch(console.dir);
Operazioni CRUD
- Creazione (Create):
async function createDocument(client, newDocument) {
const result = await client.db("testDB").collection("testCollection").insertOne(newDocument);
console.log(`Nuovo documento inserito con l'id: ${result.insertedId}`);
}
createDocument(client, { name: "John Doe", age: 30, city: "New York" });
- Lettura (Read):
async function findDocuments(client) {
const cursor = await client.db("testDB").collection("testCollection").find();
const results = await cursor.toArray();
console.log("Documenti trovati:");
console.log(results);
}
findDocuments(client);
- Aggiornamento (Update):
async function updateDocument(client, documentId, updatedDocument) {
const result = await client.db("testDB").collection("testCollection").updateOne({ _id: documentId }, { $set: updatedDocument });
console.log(`${result.matchedCount} documento(i) trovati, ${result.modifiedCount} documento(i) aggiornati`);
}
updateDocument(client, ObjectId("60c72b2f9b1d4c2d88f4918a"), { age: 31 });
- Cancellazione (Delete):
async function deleteDocument(client, documentId) {
const result = await client.db("testDB").collection("testCollection").deleteOne({ _id: documentId });
console.log(`${result.deletedCount} documento(i) cancellati`);
}
deleteDocument(client, ObjectId("60c72b2f9b1d4c2d88f4918a"));
Esercitazioni pratiche
- Installazione e configurazione di MongoDB:
- Installare MongoDB su una macchina locale o su un server remoto.
- Avviare il servizio MongoDB e verificare la connessione tramite il client MongoDB.
- Esecuzione di operazioni CRUD in MongoDB:
- Creare un nuovo database e una collezione.
- Implementare operazioni di inserimento, lettura, aggiornamento e cancellazione dei documenti utilizzando il driver MongoDB per Node.js.
- Testare le operazioni CRUD con vari dati e verificare i risultati.
- Progetto finale: Creazione di un’applicazione basata su MongoDB:
- Creare un’applicazione web che utilizza MongoDB come database backend.
- Implementare un’interfaccia utente per gestire i dati nel database.
- Assicurarsi che l’applicazione supporti tutte le operazioni CRUD e testare l’applicazione in un ambiente di sviluppo.