Come lavorare con MongoDB in .NET

MongoDB è un popolare database NoSQL a scalabilità orizzontale open source che fornisce un throughput elevato per le applicazioni basate sui dati. A differenza dei database relazionali come SQL Server, Oracle e MySQL, che archiviano i dati in tabelle secondo uno schema rigido, MongoDB archivia i dati in documenti con schema flessibile. Ci sono molti di questi database non relazionali in giro, inclusi CouchDB, RavenDB e Couchbase. Tuttavia, mi piace MongoDB principalmente per la sua scalabilità, velocità e capacità di query dinamiche.

MongoDB utilizza il formato BSON nascosto per rappresentare i documenti JSON nel cuore dell'archivio dati. BSON o "Binary JSON" è un formato di serializzazione dei dati con codifica binaria leggero ed efficiente che supporta l'attraversamento e le ricerche veloci dei dati. BSON consente inoltre a MongoDB di supportare tipi di dati, vale a dire int, long, date, floating point e decimal128, non rappresentati in JSON. 

In MongoDB i documenti fanno parte di raccolte, più o meno allo stesso modo in cui una riga fa parte di una tabella in un database relazionale. Un documento è essenzialmente una raccolta di coppie di campi e valori, che possono anche essere annidati. Tieni presente che un valore in MongoDB può essere un documento, un array di documenti, un array di BSON o solo un tipo BSON. Diamo un'occhiata a come possiamo lavorare con MongoDB usando C #. 

Installa MongoDB e crea un nuovo progetto

Inizia scaricando i binari di MongoDB. Decomprimi i binari in una cartella a tua scelta nel tuo sistema e crea una cartella separata (nel mio caso C: \ data \ db) per i dati. Quindi, per avviare MongoDB, vai alla cartella in cui è installato MongoDB ed esegui il mongodcomando nella finestra del prompt dei comandi. Questo dovrebbe avviare MongoDB sulla porta 27017 per impostazione predefinita.

Crea un nuovo progetto di applicazione console in Visual Studio e installa il pacchetto MongoDB.Driver tramite la console di Gestione pacchetti NuGet con il comando seguente.  

PM> Install-Package MongoDB.Driver

Questo installerà i seguenti tre pacchetti NuGet in una volta sola.

  • MongoDB.Bson
  • MongoDB.Driver.Core
  • MongoDB.Driver

Connettiti alla tua istanza MongoDB

Per connetterti a un'istanza MongoDB sulla sua porta predefinita 27017, puoi utilizzare il costruttore predefinito della MongoClientclasse come mostrato di seguito.

var client = new MongoClient ();

Consideriamo ora la seguente classe. Useremo questa classe per memorizzare i dati in MongoDB.

public class Autore

    {

        public int Id {get; impostato; }

        stringa pubblica FirstName {get; impostato; }

        stringa pubblica LastName {get; impostato; }

    }

Crea un database e una raccolta

Il seguente listato di codice mostra come creare un database e una raccolta al suo interno e quindi inserire un oggetto all'interno della raccolta.

static void Main (string [] args)

    {           

        var connectionString;

        var client = new MongoClient (connectionString);           

        IMongoDatabase db = client.GetDatabase ("");

        Autore autore = nuovo autore

        {

            Id = 1,

            Nome di battesimo,

            Cognome

        };

        var collection = db.GetCollection ("autori");

        collection.InsertOne (autore);

        Console.Read ();

    }

Nota che i seguenti spazi dei nomi dovrebbero essere inclusi nel tuo programma.

utilizzando MongoDB.Bson;

using MongoDB.Driver;

Ora fai riferimento al Mainmetodo nell'elenco di codice sopra. Notare che la seguente istruzione crea un nuovo database denominato ””se non esiste nessuno con quel nome.

IMongoDatabase db = client.GetDatabase(“”);

Allo stesso modo, la seguente istruzione crea una nuova raccolta di ”Author”oggetti se non ne esiste nessuno. In entrambi i casi, il GetCollectionmetodo restituisce un'istanza di raccolta.

var collection = db.GetCollection ("autori");

Aggiungi documenti alla raccolta

Successivamente, creiamo un'istanza della Authorclasse e assegniamo valori alle sue proprietà FirstNamee LastName.

Autore autore = nuovo autore

{

    Id = 1,

    Nome di battesimo,

    Cognome

};

Utilizza l'istruzione seguente per inserire l'istanza della Authorclasse nella raccolta.

collection.InsertOne (autore);

Tieni presente che puoi inserire più documenti contemporaneamente utilizzando il metodo InsertManyo InsertManyAsync. Il listato di codice seguente illustra come utilizzare il InsertManymetodo.

using System;

using System.Collections.Generic;

utilizzando MongoDB.Bson;

using MongoDB.Driver;

static void Main (string [] args)

    {           

        var connectionString;

        var client = new MongoClient (connectionString);           

        IMongoDatabase db = client.GetDatabase ("");

        var collection = db.GetCollection ("Authors");

        var author1 = new BsonDocument

        {

            {"Id", 1},

            {"Firstname", "Joydip"},

            {"Lastname", "Kanjilal"}

        };

        var author2 = new BsonDocument

        {

            {"Id", 2},

            {"Firstname", "Steve"},

            {"Lastname", "Smith"}

        };

      var author3 = nuovo BsonDocument

        {

            {"Id", 3},

            {"Firstname", "Gary"},

            {"Lastname", "Stevens"}

        };

        var autori = new List ();

        autori.Add (author1);

        autori.Add (author2);

        autori.Add (author3);

        collection.InsertMany (autori);

        Console.Read ();

    }

La BsonDocumentclasse nel pacchetto MongoDB.Bson viene utilizzata per rappresentare un documento BSON. Il seguente frammento di codice mostra come visualizzare i nomi dei database disponibili nell'istanza di MongoDB in esecuzione nel sistema.

var connectionString;

var client = new MongoClient (connectionString);           

  utilizzando (var cursore = client.ListDatabases ())

  {

    var databaseDocuments = cursor.ToList ();

    foreach (var db in databaseDocuments)

      {

        Console.WriteLine (db ["nome"]. ToString ());

      }

  }

Quando esegui lo snippet di codice sopra, vedrai il nome del database (cioè " ) elencato nella finestra della console. È inoltre possibile utilizzare il metodo asincrono,, ListDatabasesAsyncper elencare i nomi dei database, come mostrato nello snippet di codice riportato di seguito.

Attività asincrona statica privata DisplayDatabaseNames ()

    {

        var connectionString;

        var client = new MongoClient (connectionString);

        provare

        {

            using (var cursor = await client.ListDatabasesAsync ())

            {

                attende cursore.ForEachAsync (document => Console.WriteLine (document.ToString ()));

            }               

        }

        catturare

        {

            // Scrivi qui il tuo codice per gestire le eccezioni

        }

    }

MongoDB è un popolare database NoSQL che ha un modello di dati flessibile e si adatta perfettamente. MongoDB fornisce supporto per la scalabilità orizzontale utilizzando una tecnica nota come partizionamento orizzontale. Discuterò concetti più avanzati in MongoDB nei prossimi post qui. Fino ad allora, potresti voler leggere il driver MongoDB C # nella documentazione di MongoDB.