MongoDB è un database NoSQL che organizza dati seguendo la struttura degli
oggetti.
Concetti chiave per MongoDB:
- NoSQL: tipo di database che utilizza un modello di dati non relazionale e che permette una maggiore
scalabilità e flessibilità rispetto ai database relazionali
- Documenti: unità fondamentale di dati in MongoDB, che corrisponde a un record o una riga in un
database relazionale
- Collezioni: raggruppamento logico di documenti in MongoDB, corrisponde a una tabella in un database
relazionale
- Query: richiesta di dati specifici dal database MongoDB utilizzando un'interfaccia di programmazione
- Operazioni CRUD: Create, Read, Update, Delete, le operazioni di base che possono essere eseguite sui
dati di MongoDB
- Indici: struttura dati che permette di migliorare le prestazioni delle query sul database MongoDB
- Sharding: tecnica di scalabilità di MongoDB che permette di distribuire i dati su più macchine
fisiche o virtuali
- Aggregazione: operazione avanzata di query in MongoDB che permette di elaborare e raggruppare i dati
in modo flessibile
- Replica set: insieme di istanze di MongoDB che contengono copie identiche dei dati, utilizzate per
garantire la disponibilità e la ridondanza dei dati
- GridFS: sistema di archiviazione di MongoDB utilizzato per la gestione di grandi file, come ad
esempio immagini o video
Cosa facciamo oggi
Due parti: una usando Compass, l'altra rifacendo lo stesso ma usando JS
- Installazione di MongoDB Compass
- Creazione di un database
- Creazione di una collezione
- Inserimento di un documento
- Query
Comandi principali di MongoDB
- show dbs: mostra i database disponibili
- use <databasename>: consente di selezionare un database per l'utilizzo. Ad esempio:
use mydatabase
- db.collection.insertOne: consente di inserire un documento in una collezione. Ad esempio:
db.mycollection.insertOne({name: "John", age: 25})
- db.collection.find: consente di recuperare documenti da una collezione. Ad esempio:
db.mycollection.find({name: "John"})
- db.collection.updateOne: consente di aggiornare un documento in una collezione. Ad esempio:
db.mycollection.updateOne({name: "John"}, {$set: {age: 26}})
- db.collection.deleteOne: consente di eliminare un documento da una collezione. Ad esempio:
db.mycollection.deleteOne({name: "John"})
- db.collection.aggregate: consente di elaborare i dati in una collezione in modo avanzato. Ad esempio:
db.mycollection.aggregate([{$group: {_id: "$name", count: {$sum: 1}}}])
- db.collection.createIndex: consente di creare un indice per migliorare le prestazioni delle query. Ad
esempio:
db.mycollection.createIndex({name: 1})
- db.collection.drop: consente di eliminare una collezione. Ad esempio:
db.mycollection.drop()
- db.dropDatabase: consente di eliminare un database. Ad esempio:
db.dropDatabase()
- db.stats: consente di visualizzare le statistiche del database corrente. Ad esempio:
db.stats()
Installazione di MongoDB
Andiamo su mongodb e
installiamo sul pc un'instanza di MongoDB locale.
Spostiamoci sul percorso e.g. ...\MongoDB\Server\6.0\bin e avviamo poi il server in localhost.
Usando MongoDBCompass, connettiamoci ad esso.
Creazione di un database
Creiamo un database chiamato TWWiki.
Creiamo una collezione chiamata TWWikiUsers.
Inseriamo un po' di documenti:
[
{
"name": "Alice",
"email": "alice@example.com",
"age": 25
},
{
"name": "Bob",
"email": "bob@example.com",
"age": 30
},
{
"name": "Charlie",
"email": "charlie@example.com",
"age": 35
},
{
"name": "David",
"email": "david@example.com",
"age": 40
},
{
"name": "Eve",
"email": "eve@example.com",
"age": 45
}
]
Proviamo a fare un po' di query dal terminale di Compass. Per la lista completa di operatori qui:
{ "name": /^a/i }
: query usando Regex
{ "age": { "$gte": 20, "$lte": 30 } }
: Età compresa tra 20 e 30. Sintassi: { field: { $gte:
value } }; $gte equivale a >=, $lte equivale a <=< /li>
{ "name": /^C/ }
: qualunque nome che inizia per la lettera C
{ "email": { "$regex": /.*@.*\..*/ } }
: email correttamente formattata (ovvero caratteri + @ +
caratteri + almeno un punto che segue la @)
Per connettersi invece da JS, vediamo insieme il codice che utilizza il sito che avrete sul Docker, Company.