Database: NoSQL (MongoDB)

Keywords: NoSQL, MongoDB, MongoDB Compass, Schema, Mongoose

Esercizio precedente Esercizio successivo

MongoDB

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

  1. Installazione di MongoDB Compass
  2. Creazione di un database
  3. Creazione di una collezione
  4. Inserimento di un documento
  5. 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.


© Andrea Schimmenti & Fabio Vitali. TW 2022-2023.