Tutorial .Net MongoDB CRUD : C# le operazioni CRUD sul database MongoDB - Prima parte

Una serie di articoli introduttivi per eseguire le operazioni CRUD sul database MongoDB.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

In questa serie di articoli, vedremo come utilizzare la tecnologia .Net, in particolar modo il linguaggio di programmazione C#, per la gestione del database MongoDB. Vedremo le operazioni CRUD, lettura, inserimento, modifica e cancellazione dei dati in questo database di tipo NoSQL .
MongoDB, è il database più utilizzato per quanto riguarda quelli NoSQL ossia quelli non relazionali, è un database molto flessibile e che permette in maniera molto rapida e semplice di gestire i dati.

In questa serie di articoli, vedremo come gestire il database MongoDB versione Community ,  qui MongoDB Community Server | MongoDB il sito   che è quella gratuita e che si installa direttamente sul pc. Esiste anche la versione cloud, che è Atlas.
Con la versione Community di MongoDB, è possibile installare anche MongoDB Compass, che è l’interfaccia grafica che permette tramite vari comandi ed in maniera visiva, di gestire il database.
Supponiamo di avere un database denominato “Amministrazione” ed una collection denominata “Dati”, le collection sono come le tabelle per i database relazionali.
Gli esempi di codice per le varie operazioni, saranno su questo database e collection, naturalmente il lettore può utilizzare il database di proprio interesse e collection, cambiando nel codice i riferimenti .

Creazione del progetto

Apriamo Visual Studio 2022 Community e si crea un nuovo progetto di tipo “app Windows Forms”, è un progetto di tipo Windows application, ma alcuni frammenti di codice si possono utilizzare anche in ambito Web, con la tecnologia Asp.Net .  Selezioniamo come linguaggio C# e facciamo click sul pulsante “Avanti” impostiamo un nome al progetto, ed eventualmente, se desideriamo un percorso dove creare il progetto, oppure lasciamo quello che viene impostato come predefinito. Facciamo click sul pulsante “Avanti” e selezioniamo l’ultima versione del Framework .Net, nel momento in cui stiamo scrivendo la versione è la 9.
A questo punto confermiamo il tutto tramite il pulsante “Crea”. 
Nella form aggiungiamo tre pulsanti, il primo avrà la proprietà “text” con il valore “Inserisci”, e la proprietà “Name” con il valore “BtnInserisci”, il secondo pulsante con la proprietà “Text” impostata su “Modifica”, e la proprietà “Name” con il valore “BtnModifica”, infine, il terzo ed ultimo pulsante, avrà la proprietà “Text” impostata su “Elimina”, e la proprietà “Name” con il valore “BtnElimina”.
Aggiungiamo un controllo “DataGridView” ed impostiamo la proprietà “Name”, con il valore “DgvDati” e la proprietà “Dock” con il valore “Top”, in modo che viene visualizzata in alto.
Aggiungiamo due controlli di tipo “Label”, uno avrà la proprietà “Name” con il valore “Nome” e l’altro con la proprietà “Name” impostata su “Cognome”.
Vicino alle label aggiungiamo due controlli di tipo “Caselle di testo”, una avrà la proprietà “Name” impostata su “TxtNome” e l’altra con il valore “TxtCognome” della medesima proprietà.
L’interfaccia grafica sarà come quella riportata qui di seguito.

la form con i vari controlli

Figura 1 – La form con i vari controlli

Dopo aver aggiunto i vari controlli dobbiamo aggiungere il componente per la gestione del database “MongoDB”, in particolare il componente MongoDB.Driver . Tramite Nuger, cerchiamo il componente “MongoDB.Driver”, il tutto come mostrato in figura 2.

Figura 2 – Il componente per la gestione del database in .Net

Figura 2 – Il componente per la gestione del database in .Net

Stesura del codice

Dopo aver aggiunto il componente per la gestione del database di MongoDB, passiamo alla stesura del codice.
Prima di utilizzare le classi per la gestione di questo Database NoSQl, occorre inserire lo spazio dei nomi. Passiamo in visualizzazione codice, ed in alto, sopra ad ogni dichiarazione, inseriamo lo spazio dei nomi per collegarsi e gestire i database MongoDB.
Di seguito si riportano i namespace delle suddette operazioni.

C#
using MongoDB.Bson;
using MongoDB.Driver;

Sempre rimanendo in visualizzazione codice, scriviamo nella classe della Form, dove si trovano gli eventi e funzioni e proprietà della nostra form, una procedura che permette il caricamento dei dati nella griglia.
In questa procedura utilizzeremo la classe "MongoClient", passando come parametro l’indirizzo server di dove gira il client di MongoDB Community,  il quale ci permette di gestire i database, tramite il metodo "GetDatabase", otteniamo riferimento alla "Collection", e tramite "GetCollection", restituisce un oggetto di tipo "IMongoCollection" di tipo "BsonDocument", per la gestione delle collection.
Tramite il metodo "Find", dell’istanza IMongoCollection, estrapoliamo tutti i dati della collection.
Di seguito si riporta il frammento di codice della funzione delle suddette operazioni, permettendo il caricamento dei dati della Griglia.

C#
private void CaricaDati()
{
   try
   {
       //Creo un istanza del client MongoDB
       var clientMongoDB = new MongoClient("mongodb://localhost:27017");
       //Creo un istanza del database
       var database = clientMongoDB.GetDatabase("Amministrazione");
       //Creo un istanza della collection
       var collection = database.GetCollection<BsonDocument>("Dati");
       //Leggo i dati dalla collection
       var dati = collection.Find(new BsonDocument()).ToList();
       //Visualizzo i dati nella dataGridView
       DgvDati.DataSource = null; // Reset the DataSource before setting a new one
       DgvDati.DataSource = dati.Select(d => new
       {
           ID = d["_id"].ToString(),
           Nome = d["nome"].ToString(),
           Cognome = d["cognome"].ToString(),
           Email = d["email"].ToString()
       }).ToList();
   }
   catch (Exception ex)
   {
       MessageBox.Show(ex.Message);
   }
}

Passiamo in visualizzazione codice e facciamo doppio click sulla form, in modo da passare in visualizzazione codice nell’evento load della form stessa.
In questo evento inseriamo il codice per invocare la procedura appena creata.
Di seguito si riporta il frammento di codice delle suddette operazioni.

C#
private void Form1_Load(object sender, EventArgs e)
{
   CaricaDati();
}

Il risultato sarà come in figura 3

Figura 3 – La visualizzazione dei dati

Figura 3 – La visualizzazione dei dati

Una precisazione molto importante, i campi delle colonne, come le collection, devono essere scritte  rispettando le maiuscole e minuscole, altrimenti se scriviamo una lettera di un campo con la lettera maiuscola e questa è minuscola sulla collection, genera un errore, come riportato in figura 4.

Figura 4 – L’errore per una lettera maiuscola non presente.

Figura 4 – L’errore per una lettera maiuscola non presente.

Possiamo estrapolare i dati in maniera strutturata passando una classe ben definita anziché la classe generica di MongoDB che è la BsonDocument.

Si crea una classe che corrisponde alla collection divenendo un’entità a tutti gli effetti.
Di seguito la classe Dati, che avrà tutte le proprietà della collection dalla quale vogliamo estrapolare i dati.
Di seguito si riporta il frammento di codice della classe.

C#
public class Dati
{
   public ObjectId _id { get; set; }
   public string nome { get; set; }
   public string cognome { get; set; }
   public string email { get; set; }
   public DateTime data_nascita { get; set; }
}

La procedura del caricamento dati avrà una piccola modifica, in particolare nel metodo “GetCollection” passeremo il nome della classe appena creata.
Di seguito si riporta la funzione per il caricamento dei dati modificata.

C#
private void CaricaDati()
{
   try
   {
       var clientMongoDB = new MongoClient("mongodb://localhost:27017");
       var database = clientMongoDB.GetDatabase("Amministrazione");
       // Creo un'istanza della collection con una strttura di dati tipizzata
       var collection = database.GetCollection<Dati>("Dati");
       var dati = collection.Find(new BsonDocument()).ToList();    
       DgvDati.DataSource = dati.Select(d => new
       {
           ID = d._id.ToString(),
           Nome = d.nome,
           Cognome = d.cognome,
           Email = d.email
       }).ToList();
   }
   catch (Exception ex)
   {
       MessageBox.Show(ex.Message);
   }
}

Naturalmente anche in questo caso, le proprietà della classe devono rispettare le maiuscole e minuscole dei campi della collection, altrimenti genera un errore come riportato nella figura qui di seguito.

Figura 5 – L’errore per una lettera maiuscola di un campo

Figura 5 – L’errore per una lettera maiuscola di un campo

Conclusioni

L’articolo ha voluto illustrare al lettore la semplicità di gestire un database di tipo NoSQL.
MongoDB è il Database più utilizzato e conosciuto in ambito NoSQL ed offre tanta flessibilità e semplicità nel gestire le informazioni.
Proprio per la sua mancanza di regole rigide, come può essere un database relazionare, lo rende facile da utilizzare ma soprattutto si apprende in maniera rapida.
In questo articolo abbiamo affrontato la prima operazione nel gestire i dati tramite il linguaggio di programmazione C# e la tecnologia .Net, nei prossimi articoli vedremo altre operazioni, quali inserimento, cancellazione e modifica dei dati.
Il codice e l’articolo fa riferimento al database MongoDB Community, il quale si installa su un qualsiasi pc, ed è facilmente gestibile localmente su un pc, anche tramite il programma di interfaccia grafica MongoDB Compass.