- Artikel von Ken W. Alger
englischer Originalartikel
https://www.mongodb.com/blog/post/quick-start-csharp-and-mongodb--update-operation
Übersetzung mit freundlicher Genehmigung von MongoDB
In der letzten Ausgabe dieser C#-Kurzanleitung für MongoDB-CRUD-Operationen haben wir einige der verschiedenen Möglichkeiten zum Lesen von Daten untersucht. Wir haben gesehen, wie wir unserer Abfrage Filter hinzufügen und die Daten sortieren. In diesem Beitrag geht es um den Update-Vorgang und darum, wie Update und MongoDB des C#-Treibers zusammenarbeiten, um diese wichtige Aufgabe zu erfüllen.
Denken Sie daran, dass wir mit dieser BsonDocument-Version eines Schülerdatensatzes gearbeitet haben:
var document = new BsonDocument
{
{ "student_id", 10000 },
{ "scores", new BsonArray
{
new BsonDocument{ {"type", "exam"}, {"score", 88.12334193287023 } },
new BsonDocument{ {"type", "quiz"}, {"score", 74.92381029342834 } },
new BsonDocument{ {"type", "homework"}, {"score", 89.97929384290324 } },
new BsonDocument{ {"type", "homework"}, {"score", 82.12931030513218 } }
}
},
{ "class_id", 480}
};
Nachdem der Kursleiter unseres Musterschülers die Benotungsphase durchlaufen hat, stellt er fest, dass er in der falschen Klasse war. Aufgrund dieses Fehlers muss die Schulverwaltung, die mit seinem Datensatz verknüpfte "class_id" ändern oder aktualisieren. Er wird in die Klasse mit der ID 483 umziehen.
- Daten aktualisieren
Um ein Dokument zu aktualisieren, müssen zwei Informationen an einen Aktualisierungsbefehl übergeben werden. Wir benötigen einen Filter, um festzustellen, welche Dokumente aktualisiert werden. Zweitens benötigen wir das, was wir aktualisieren möchten.
- Update Filter
In unserem Beispiel möchten wir basierend auf dem Dokument filtern, wobei "student_id" gleich 10000 ist.
var filter = Builders<BsonDocument>.Filter.Eq("student_id", 10000)
- Zu ändernde Daten
Als Nächstes möchten wir die "class_id" ändern. Wir können das mit Set() in der Update()-Methode machen.
var update = Builders<BsonDocument>.Update.Set("class_id", 483);
Dann verwenden wir die UpdateOne()-Methode, um die Änderungen vorzunehmen. Beachten Sie hierbei, dass MongoDB höchstens ein Dokument mit der UpdateOne()-Methode aktualisiert. Wenn keine Dokumente mit dem Filter übereinstimmen, werden keine Dokumente aktualisiert.
collection.UpdateOne(filter, update);
- Änderungen in Arrays
Nicht alle Änderungen sind so einfach wie das Ändern eines einzelnen Feldes. Verwenden wir einen anderen Filter, der ein Dokument mit einer bestimmten Punktzahl für "quiz" auswählt:
var arrayFilter = Builders<BsonDocument>.Filter.Eq("student_id", 10000)
& Builders<BsonDocument>.Filter.Eq("scores.type", "quiz");
Wenn wir nun die Änderung an der Quiz-Punktzahl vornehmen möchten, können wir dies auch mit Set() tun, aber zu bestimmen, welches Element geändert werden soll, ist etwas anders. Wir können den positionellen $-Operator verwenden, um auf die Quizwertung im Array zuzugreifen. Der $-Operator allein sagt "Ändere das Array-Element, das wir in der Abfrage gefunden haben" - der Filter stimmt mit Scores.Typ überein, der gleich Quiz ist, und dieses Element wird aktualisiert.
var arrayUpdate = Builders<BsonDocument>.Update.Set("scores.$.score", 84.92381029342834);
Und wieder verwenden wir die UpdateOne()-Methode, um die Änderungen vorzunehmen.
collection.UpdateOne(arrayFilter , arrayUpdate);
- Zusätzliche Update-Methoden
Wenn Sie in dieser Blogserie mitlesen, haben wir erwähnt, dass der C#-Treiber sowohl synchrone- als auch asynchrone-Interaktion mit MongoDB unterstützt. Das ist beim Durchführen von Datenaktualisierungen nicht anders. Es ist auch eine UpdateOneAsync()- Methode verfügbar. In den Fällen, in denen mehrere Dokumente gleichzeitig aktualisiert werden müssen, stehen zusätzlich die Optionen UpdateMany() oder UpdateManyAsync() zur Verfügung. Die UpdateMany()- und UpdateManyAsync()-Methoden stimmen mit den Dokumenten im Filter überein und aktualisieren alle Dokumente, die den Filteranforderungen entsprechen.
- Zusammenfassung
Update ist ein wichtiger Operator in der CRUD-Welt.
Nicht in der Lage zu sein, Dinge zu aktualisieren, wenn sie sich ändern, würde das Programmieren unglaublich schwierig machen. Glücklicherweise arbeiten C# und MongoDB weiterhin gut zusammen, um die Operationen zu ermöglichen und die Verwendung zu vereinfachen. Unabhängig davon, ob die Note eines Schülers oder die Adresse eines Benutzers aktualisiert wird, ist Update die Methodik der Wahl, um die Änderungen zu verarbeiten. Der Code für die Vorgänge "Create", "Read" und "Update" befindet sich in dieser Übersicht. https://gist.github.com/kenwalger/f5cf317aa85aad2aa0f9d627d7a8095c