import {Bluelib, Heading, Chapter, Box, ListUnordered, ListOrdered, Parenthesis, Idiomatic as I, BringAttention as B, UAnnotation as U, Dialog, Quote, Code, Anchor, Variable, Panel} from "@steffo/bluelib-react" import type { NextPage, NextPageContext } from 'next' import { Link } from '../../../components/link' const r = String.raw export async function getStaticProps(_context: NextPageContext) { return { props: {} } } const Page: NextPage = () => { return <> 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:

{r`{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:

{r`{"quantity": 1}`}
Nested

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

{r`{"product.name": "Garasauto"}`}
Proiezione } export default Page