Unisteffo

Big data analytics

MongoDB

Cos'è?

Humongous Database

Un database non-relazionale basato su documenti JSON.

Vantaggi e svantaggi

  • Schema flessibile
  • Facilmente scalabile
  • Richiede pochi joins
  • Facilmente interfacciabile con tutti i linguaggi
  • Integra funzionalità utili sia da RDBMS sia da sistemi chiave→valore
E gli svantaggi?

Glossario di MongoDB

Documenti

Raccolte di dati in formato BSON (simil-JSON binario).

Come i record di un database relazionale!

La sintassi dei documenti non è strettamente JSON: è più simile a quella degli oggetti di JavaScript, dato che non richiede virgolette esplicite nelle chiavi:

{something: "maybe"}

Collezioni

Insiemi di documenti senza uno schema fisso, ma con un indice in comune.

Come le tables relazionali, ma più flessibili!

Database

Insiemi di collezioni.

È esattamente uguale al mondo relazionale. Non c'è molto da dire a riguardo.

ID

Il valore di un documento alla chiave _id.

Deve essere unico, immutabile, e non-array.

Mettere in relazione i dati in MongoDB

Embedding

Inserimento di un dato come documento annidato all'interno di un documento.

Fornisce data locality, quindi è più veloce per operazioni molto frequenti, ma a costo di spazio di archiviazione.

Linking

Inserimento di un dato attraverso l'ID del documento che referenzia.

Più lento con guadagno di spazio, per operazioni poco frequenti.

Accedere a MongoDB

Override

Il prof. consiglia di usare Robo 3T, ma è end-of-life.

In questo sito userò invece la shell integrata a IntelliJ IDEA Ultimate.

Tutte le differenze saranno evidenziate in magenta.

Create

Il metodo consigliato nelle slides, db.COLLEZIONE.insert(...), è deprecato.

È possibile inserire un documento all'interno di una collezione con:

db.COLLEZIONE
.insertOne(DOCUMENTO)

È possibile inserire tanti documenti all'interno della stessa collezione con:

db.COLLEZIONE
.insertMany([DOCUMENTO1, DOCUMENTO2, ...])

Read

È possibile recuperare tutti i documenti di una collezione con:

db.COLLEZIONE.find()

È possibile effettuare filtraggio e proiezione passando oggetti ai parametri FILTRI e PROIEZIONI di find:

db.COLLEZIONE.find({...FILTRI}, {...PROIEZIONI})

È anche possibile effettuare ordinamenti e limitazioni:

db.COLLEZIONE
.find(...)
.sort({...CRITERI})
.limit(LIMITE)

Oppure recuperare un documento solo, invece che un array di documenti:

db.COLLEZIONE.findOne(...)

Update

Upsert

Delete

Filtri

Top-level

Per filtrare in base a dei campi top-level è sufficiente specificarli come top-level dell'oggetto:

{"quantity": 1}

Nested

Per filtrare per campi interni all'oggetto, è possibile usare la notazione puntata:

{"product.name": "Garasauto"}

Proiezione