Humongous Database
Un database non-relazionale basato su documenti JSON.
Raccolte di dati in formato BSON (simil-JSON binario).
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"}
Insiemi di documenti senza uno schema fisso, ma con un indice in comune.
Insiemi di collezioni.
Il valore di un documento alla chiave _id
.
Deve essere unico, immutabile, e non-array.
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.
Inserimento di un dato attraverso l'ID del documento che referenzia.
Più lento con guadagno di spazio, per operazioni poco frequenti.
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.
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, ...])
È 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(...)
Per filtrare in base a dei campi top-level è sufficiente specificarli come top-level dell'oggetto:
{"quantity": 1}
Per filtrare per campi interni all'oggetto, è possibile usare la notazione puntata:
{"product.name": "Garasauto"}