In questo articolo vedremo come utilizzare MongoDB con Delphi.
Questa non vuole essere una guida dettagliata a MongoDB, potete trovare ovunque una marea di informazioni, partendo ad esempio dal sito ufficiale: https://docs.mongodb.com/
Cos'è MongoDB
RELAZIONALE (Oracle, Firebird, ...)
|
MongoDB
|
TABELLA
|
Collection
|
RECORD
|
Document
|
COLONNA
|
Field
|
SELECT * FROM ANAGRAFICA
|
db.anagrafica.find()
|
INSERT INTO ANAGRAFICA
|
db.anagrafica.insert({}}
|
I punti di forza di MongoDB e i motivi principali per cui utilizzarlo sono:
- Scalabilità
- Performance
- Alta affidabilità, grazie ai replica set
- Flessibilità, non esiste il concetto di schema di una tabella, ogni documento di una collection può essere diverso dall'altro
Personalmente ho trovato vincente un approccio misto, utilizzando molte tabelle di un classico database relazionale e solo poche collection in un db nosql, dove sono contenuti dati dernomalizzati per un accesso rapido alle informazioni.
MongoDB utilizza il formato JSON per la visualizzazione dei dati e il linguaggio JavaScript, è quindi vivamente consigliato conoscere entrambi.
Esempio di documento in JSON:
{
"nome": "Luca",
"indirizzo": "Via del Popolo 20",
"figli": [
{ "nome": "Annamaria", "eta": 3 },
{ "nome": "Luigi", "eta": 2 }
]
}
Installazione
(Windows)
dal prompt del dos, eseguire:
mongod
per poter accedere alla console interattiva, da cui è possibile fare operazioni CRUD, aprire un altro prompt del dos e digitare:
mongo
use anagrafica
// Create:
db.anagrafica.insert({
"nome": "Mario",
"indirizzo": "Via Veneto 10",
"hobby": "Calcio"
})
// Read:
db.anagrafica.find()
// Per visualizzare meglio il risultato:
db.anagrafica.find().pretty()
// Update:
db.anagrafica.update({}, {
$set: {"nome": "Luigi"}
})
// Delete: (all)
db.anagrafica.drop()
Alcune considerazioni:
- Il comando use <nome-database> permette di passare al db in questione o a crearne uno nuovo se non esiste
- Ogni comando CRUD inizia con "db."
- Il comando insert su una collection che ancora non esiste (ad esempio db.anagrafica.insert({})) crea prima automaticamente la collection
- Le operazioni di default che compongono i comandi iniziano con il simbolo di $
- Il comando update, esegue l' update del primo record trovato
Delphi
Per l'utilizzo con Delphi esistono diverse soluzioni:
In questo articolo utilizzerò i componenti FireDAC con Delphi 10.1 Berlin.
Ho creato un semplice progetto demo CRUD:
In particolare per la lettura dei dati utilizzo il componente visuale:
FDMongoQuery
utilizzandolo come un DataSet standard:
while not FDMongoQuery.Eof do
begin
LogMessage('Record: ' + FDMongoQuery.FieldByName('name').AsString);
FDMongoQuery.Next;
end;
begin
LogMessage('Record: ' + FDMongoQuery.FieldByName('name').AsString);
FDMongoQuery.Next;
end;
Per l'inserimento dei dati utilizzo questi oggetti (non visuali):
TMongoConnection, TMongoDocument, TMongoEnv
che utilizzano un approccio fluent per la creazione del documento MongoDB:
MongoDoc := MongoEnv.NewDoc;
try
MongoDoc
.Add('name', 'Name ' + IntToStr(i) + ' - Record ' + IntToStr(i))
.Add('age', IntToStr(i));
MongConn[DB_NAME][COLLECTION_NAME].Insert(MongoDoc);
finally
MongoDoc.Free;
end;
try
MongoDoc
.Add('name', 'Name ' + IntToStr(i) + ' - Record ' + IntToStr(i))
.Add('age', IntToStr(i));
MongConn[DB_NAME][COLLECTION_NAME].Insert(MongoDoc);
finally
MongoDoc.Free;
end;
Per ulteriori approfondimenti vi consiglio di vedere questo video:
https://www.youtube.com/watch?v=_YxKUFSyV7U
Il codice sorgente si trova qui:
In particolare il file principale è questo:
Nessun commento:
Posta un commento