Zugriff auf MongoDB mittels C#

Im folgenden Beitrag wird ein rudimentärer Zugriff auf eine MongoDB-Datenbank mittels C# beschrieben. Ich denke anhand der gegebenen Informationen, kann der informierte Leser weitere Schlüsse ziehen und komplexere Dinge realisieren. Bei Fragen: bitte gerne Kommentare Hinterlassen.

Im ersten Schritt müssen die entsprechenden Treiber für MongoDB geladen werden. Dazu nutzt man den NuGet-Paketmanager, der in VisualStudio enthalten ist (sofern man ihn bereits installiert hat):

MongoDB-Treiber-Liste

Im nächsten Schritt sind dann die folgenden Komponenten im Quellcode notwendig. Zunächst der Verweis auf den Treiber:

using MongoDB.Driver;
using MongoDB.Bson;

Die URI der MongoDB-Instanz mit der gearbeitet werden soll, wird in einer Umgebungsvariable abgelegt:

Environment.SetEnvironmentVariable("MONGODB_URI", "mongodb://IP-Adresse:27017/?retryWrites=true&w=majority");

Damit sind alle Voraussetzungen gegeben, um mit den MongoDB-Daten zu arbeiten. Im folgenden Beispiel-Code werden Daten von einer Collection zur anderen kopiert:

// Der Connection-String wird aus der Umgebungsvariable gelesen
           var connectionString = Environment.GetEnvironmentVariable("MONGODB_URI");

// Falls nicht vorhanden, endet das Programm mit Fehler
           if (connectionString == null)
            {
                Console.WriteLine("You must set your 'MONGODB_URI' environmental variable. See\n\t https://www.mongodb.com/docs/drivers/go/current/usage-examples/#environment-variable");
                Environment.Exit(0);
            }

// Ein neuer MongoDB-Client wird auf Basis des Connection-String (auf Datenbank "default" definiert und eine Collection "collection_from" daraus ausgewählt
            var client = new MongoClient(connectionString);
            var collection = client.GetDatabase("default").GetCollection<BsonDocument>("collection_from");

// Mit einem einfachen Filter werden Datensätze/Dokumente ausgewählt, die gelesen werden sollen. Hier Dokumente mit "Test" in der Eigenschaft "dataset"
            var filter = Builders<BsonDocument>.Filter.eq("dataset", "Test");
// Und die Dokumente werden gezählt
            var documentcount = collection.Find(filter).CountDocuments();


// Die Dokumente werden in eine Liste geladen
            var DocList = collection.Find(filter).ToList();

// Und die Ziel-Collection definiert
            var collection2 = client.GetDatabase("default").GetCollection<BsonDocument>("collection_to");

// Die einzelnen Dokumente werden in einer Schleife in die Ziel-Collection geschrieben
            for (var i = 0; i < DocList.Count; i++)
            {
                Console.WriteLine(i + " von " + documentcount + ": "  +DocList[i]);
                collection2.InsertOne(DocList[i]);
                ;
            }

Damit sind wir schon am Ende eines einfachen Beispiels. Die Idee dahinter war auch ein einfacher Performance-Test. Meine MongoDB läuft in einem Docker-Container auf einer kleinen QNAP. Trotz einer knappen Million Dokumente war das ganze in einer vertretbaren Zeit erledigt. Das ganze diente zur Vorbereitung eines Proof-of-concept für ein künftiges Projekt der MJR GmbH und kann somit als erfolgreich abgehakt werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert