MongoDB.Driver für C# (.NET): Komplette Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

MongoDB.Driver für C# (.NET): Komplette Anleitung

1. Was ist MongoDB.Driver und warum wird es benötigt?

MongoDB.Driver ist der offizielle, leistungsstarke und asynchrone Treiber für die Interaktion von .NET-Anwendungen (C#, F#, VB.NET) mit der Datenbank MongoDB. Er bietet einen vollständigen Satz an Werkzeugen für alle CRUD-Operationen (Create, Read, Update, Delete), die Verwaltung von Indizes, Datenaggregation, Transaktionen und die Verarbeitung von Echtzeit-Änderungen (Change Streams). Der Treiber wird von MongoDB Inc. entwickelt und gewartet, was volle Kompatibilität mit den neuesten MongoDB-Versionen und die Implementierung aller modernen DBMS-Funktionen garantiert.

Warum wird diese Bibliothek benötigt? Wenn Sie eine .NET-Anwendung entwickeln (einen Webdienst mit ASP.NET Core, eine Desktop-Anwendung mit WPF, ein Konsolentool oder einen Microservice) und MongoDB als primären oder sekundären Datenspeicher nutzen möchten, benötigen Sie einen Treiber, um eine Verbindung herzustellen und Daten auszutauschen. MongoDB.Driver abstrahiert die Komplexität des MongoDB-Wire-Protokolls und bietet dem Entwickler eine komfortable, streng typisierte API. Sie arbeiten mit C#-Objekten, und der Treiber serialisiert diese automatisch in BSON (das binäre Format von MongoDB) und zurück. So können Sie präzisen, sicheren und performanten Code schreiben, ohne sich mit den Details der Low-Level-Kommunikation befassen zu müssen.

Die Bibliothek unterstützt zwei Hauptparadigmen: synchron und asynchron (empfohlen). Asynchrone Methoden (mit dem Suffix Async) blockieren keine Ausführungsthreads, was für skalierbare Serveranwendungen entscheidend ist. Der Treiber enthält außerdem einen LINQ-Provider, der LINQ-Abfragen in die MongoDB-Aggregation-Pipeline-Syntax übersetzt, wodurch der Code noch deklarativer und für .NET-Entwickler vertrauter wird.

2. Installation

Die Installation erfolgt über den NuGet-Paketmanager. Führen Sie einen der folgenden Befehle in der Paket-Manager-Konsole (Package Manager Console) oder im .NET CLI-Terminal aus.

Über .NET CLI (empfohlen):

dotnet add package MongoDB.Driver

Über die Paket-Manager-Konsole (Visual Studio):

Install-Package MongoDB.Driver

Für Projekte, die Entity Framework Core verwenden (optional):

Es gibt einen separaten Provider MongoDB.EntityFrameworkCore, aber für die meisten Aufgaben reicht der Haupttreiber aus.

Nach der Installation wird dem Projektverzeichnis (.csproj) ein Verweis hinzugefügt:

<PackageReference Include="MongoDB.Driver" Version="2.25.0" />

3. Schnellstart – Minimales Arbeitsbeispiel

Der folgende Code stellt eine Verbindung zu einer lokalen MongoDB-Instanz her, ruft die Datenbank "testdb" und die Sammlung "users" ab, fügt ein Dokument ein und gibt dessen ID auf der Konsole aus.

using MongoDB.Bson;
using MongoDB.Driver;

// 1. Client erstellen (Verbindung zum Server)
var client = new MongoClient("mongodb://localhost:27017");

// 2. Datenbank abrufen (wird automatisch erstellt, falls nicht vorhanden)
var database = client.GetDatabase("testdb");

// 3. Sammlung abrufen (wird beim ersten Einfügen automatisch erstellt)
var collection = database.GetCollection<BsonDocument>("users");

// 4. Dokument erstellen
var document = new BsonDocument
{
    { "name", "Alice" },
    { "age", 30 },
    { "city", "Berlin" }
};

// 5. Dokument einfügen (asynchron)
await collection.InsertOneAsync(document);

// 6. Generierte ID ausgeben
Console.WriteLine($"Dokument eingefügt mit ID: {document["_id"]}");

// 7. Alle Dokumente aus der Sammlung lesen
var allUsers = await collection.Find(new BsonDocument()).ToListAsync();
foreach (var user in allUsers)
{
    Console.WriteLine(user.ToJson());
}

4. Wichtige Methoden/Funktionen/Klassen

4.1 MongoClient

Die Klasse MongoClient ist der Einstiegspunkt für die Verbindung zu einem MongoDB-Server oder -Cluster. Sie verwaltet Verbindungspools und ist threadsicher. In der Regel wird eine einzige Instanz für die gesamte Anwendungslebensdauer verwendet.

var client = new MongoClient("mongodb://localhost:27017");
// Oder mit Verbindungszeichenfolge für Authentifizierung:
var client = new MongoClient("mongodb://benutzername:passwort@localhost:27017");

4.2 IMongoDatabase

Repräsentiert eine einzelne Datenbank. Wird über GetDatabase() abgerufen. Bietet Methoden zum Erstellen und Auflisten von Sammlungen sowie zum Ausführen von Datenbankbefehlen.

var database = client.GetDatabase("meineDatenbank");
// Sammlungen auflisten
var collections = await database.ListCollectionNamesAsync();

4.3 IMongoCollection<T>

Repräsentiert eine Sammlung von Dokumenten. Dies ist die zentrale Klasse für CRUD-Operationen. Sie ist generisch und kann mit BsonDocument oder einer POCO-Klasse (Plain Old CLR Object) verwendet werden.

// Mit BsonDocument
var collection = database.GetCollection<BsonDocument>("produkte");

// Mit einer POCO-Klasse
var collection = database.GetCollection<Produkt>("produkte");

4.4 CRUD-Operationen

Einfügen (Create):

await collection.InsertOneAsync(dokument);
await collection.InsertManyAsync(listeVonDokumenten);

Lesen (Read):

// Ein einzelnes Dokument finden
var result = await collection.Find(filter).FirstOrDefaultAsync();

// Alle passenden Dokumente finden
var results = await collection.Find(filter).ToListAsync();

// Mit Projektion (nur bestimmte Felder)
var projection = Builders<BsonDocument>.Projection.Include("name").Exclude("_id");
var results = await collection.Find(filter).Project(projection).ToListAsync();

Aktualisieren (Update):

var update = Builders<BsonDocument>.Update.Set("alter", 31);
await collection.UpdateOneAsync(filter, update);
await collection.UpdateManyAsync(filter, update);

Löschen (Delete):

await collection.DeleteOneAsync(filter);
await collection.DeleteManyAsync(filter);

4.5 Filterdefinitionen

Die Klasse Builders<T>.Filter bietet eine typsichere Möglichkeit, Filterabfragen zu erstellen.

var filter = Builders<BsonDocument>.Filter.Eq("name", "Alice");
var filter2 = Builders<BsonDocument>.Filter.Gt("alter", 25);
var filter3 = Builders<BsonDocument>.Filter.And(
    Builders<BsonDocument>.Filter.Eq("stadt", "Berlin"),
    Builders<BsonDocument>.Filter.Gte("alter", 18)
);

4.6 LINQ-Unterstützung

MongoDB.Driver enthält einen LINQ-Provider, der LINQ-Abfragen in MongoDB-Aggregation-Pipelines übersetzt.

var result = await collection.AsQueryable()
    .Where(u => u.Alter > 25)
    .OrderBy(u => u.Name)
    .Select(u => new { u.Name, u.Stadt })
    .ToListAsync();

5. Best Practices und Tipps

  • Verwenden Sie asynchrone Methoden: Nutzen Sie immer die Async-Varianten (InsertOneAsync, FindAsync usw.), um Threads nicht zu blockieren.
  • Einmalige Client-Instanz: Erstellen Sie eine einzelne MongoClient-Instanz und verwenden Sie diese während der gesamten Anwendungslebensdauer (Dependency Injection in ASP.NET Core).
  • POCOs statt BsonDocument: Verwenden Sie nach Möglichkeit stark typisierte POCO-Klassen. Dies verbessert die Lesbarkeit und Typsicherheit.
  • Indizes nutzen: Erstellen Sie Indizes für häufig abgefragte Felder, um die Abfrageleistung zu verbessern.
  • Verbindungszeichenfolge konfigurieren: Definieren Sie die Verbindungszeichenfolge in der Konfigurationsdatei (appsettings.json) und nicht fest im Code.

6. Fazit

MongoDB.Driver ist der offizielle und leistungsstärkste Weg, um MongoDB aus .NET-Anwendungen heraus zu nutzen. Mit seiner asynchronen API, der LINQ-Unterstützung und der vollständigen Abdeckung aller MongoDB-Funktionen ist er die ideale Wahl für moderne .NET-Projekte. Die Installation über NuGet ist unkompliziert, und die ersten Schritte sind schnell erledigt. Für weiterführende Informationen und die vollständige API-Referenz besuchen Sie die offizielle MongoDB-Dokumentation.

Empfehlungen