MongoDB

MongoDB ist die führende Open-Source, Document Datenbank die für einfache Entwicklung und Skalierung aber auch für Big Data Szenarien entwickelt wurde.

C# und MongoDB - Update-Operationen

Experte
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

Neueste Mitgliederaktivitäten

Tags

Diesen Community Beitrag weiterempfehlen