5.3.6 – Database documentali – database NoSQL (MongoDB)

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

  1. Database documentali: Memorizzano i dati in documenti simili a JSON (ad esempio, MongoDB, CouchDB).
  2. Database a colonne: Organizzano i dati in colonne piuttosto che in righe (ad esempio, Cassandra, HBase).
  3. Database a grafo: Utilizzano nodi, bordi e proprietà per rappresentare e memorizzare i dati (ad esempio, Neo4j, ArangoDB).
  4. 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

  1. Database: Una collezione di raccolte (collections).
  2. Collection: Un gruppo di documenti.
  3. Document: Un insieme di campi e valori, simile a un oggetto JSON.

Installazione e configurazione di MongoDB

  1. Installazione su Linux (esempio con Ubuntu):
sudo apt update
sudo apt install -y mongodb
  1. Avvio del servizio MongoDB:
sudo systemctl start mongodb
  1. 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.

  1. Installazione del driver MongoDB per Node.js:
npm install mongodb
  1. 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

  1. 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" });
  1. 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);
  1. 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 });
  1. 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

  1. 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.
  1. 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.
  1. 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.