MongoDB è il database NoSQL a documenti più diffuso. La sua struttura gerarchica è:
Database
└── Collection (equivalente di una tabella)
└── Document (equivalente di una riga)
└── Field (equivalente di una colonna)
Equivalenza concettuale:
| SQL (Relazionale) | MongoDB (NoSQL) |
|---|---|
| Database | Database |
| Tabella | Collection |
| Riga (tuple) | Document (JSON/BSON) |
| Colonna | Field |
| Primary Key | _id (generato automaticamente) |
| JOIN | $lookup o embedding |
| Schema fisso | Schema flessibile |
Ogni documento è un oggetto BSON (Binary JSON) con un campo _id univoco generato automaticamente:
{
"_id": ObjectId("507f1f77bcf86cd799439011"),
"nome": "Mario",
"cognome": "Rossi",
"email": "[email protected]",
"data_nascita": "2005-03-15",
"voti": [7, 8, 9, 6],
"indirizzo": {
"via": "Via Roma",
"civico": "1",
"città": "Milano",
"CAP": "20100"
},
"corsi": ["Matematica", "Informatica", "Storia"]
}
Nota: i campi possono contenere array e oggetti annidati — questo sarebbe impossibile in una singola riga SQL senza tabelle separate.
// CREATE — inserire un documento
db.studenti.insertOne({
nome: "Mario",
cognome: "Rossi",
voto_medio: 7.5
});
db.studenti.insertMany([
{ nome: "Luigi", cognome: "Bianchi" },
{ nome: "Anna", cognome: "Verdi" }
]);
// READ — trovare documenti
db.studenti.find(); // tutti i documenti
db.studenti.find({ voto_medio: { $gt: 7 } }); // voto_medio > 7
db.studenti.findOne({ nome: "Mario" }); // primo risultato
// UPDATE — aggiornare
db.studenti.updateOne(
{ nome: "Mario" }, // filtro
{ $set: { voto_medio: 8.0 } } // modifica
);
db.studenti.updateMany(
{ voto_medio: { $lt: 6 } },
{ $set: { stato: "insufficiente" } }
);
// DELETE — eliminare
db.studenti.deleteOne({ nome: "Mario" });
db.studenti.deleteMany({ voto_medio: { $lt: 5 } });
Operatori di query MongoDB:
| Operatore | SQL equivalente | Esempio |
|---|---|---|
$eq |
= |
{ età: { $eq: 20 } } |
$gt |
> |
{ voto: { $gt: 6 } } |
$gte |
>= |
{ voto: { $gte: 6 } } |
$lt |
< |
{ voto: { $lt: 5 } } |
$in |
IN |
{ città: { $in: ["Roma", "Milano"] } } |
$and |
AND |
{ $and: [{età: {$gt:18}}, {voto:{$gt:6}}] } |
$or |
OR |
{ $or: [{nome:"Mario"}, {nome:"Luigi"}] } |