MongoDB bietet verschiedene Möglichkeiten, ein Dokument zu aktualisieren. Die Methode, die Sie verwenden, hängt davon ab, wie Sie die Aktualisierung genau durchführen möchten.
Dieser Artikel stellt 4 Möglichkeiten vor, ein Dokument in MongoDB zu aktualisieren.
Der db.collection.updateOne() Methode
Die db.collection.updateOne() -Methode tut genau das, was ihr Name verspricht – sie aktualisiert ein Dokument.
Angenommen, wir haben eine Sammlung namens pets die folgende Dokumente enthält:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" } Wir könnten ein Dokument wie folgt aktualisieren:
db.pets.updateOne(
{ type: "Dog" },
{ $set: { type: "Cow" } }
) Ergebnis:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
Dadurch wurde nur ein Dokument aktualisiert, obwohl zwei Dokumente den Filterkriterien entsprechen (die Kriterien sind type: "Dog"). ).
Wir können die Ergebnisse wie folgt überprüfen:
db.pets.find() Ergebnis:
{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
Das erste Dokument hat jetzt einen type von Cow statt Dog , aber das zweite Dokument war nicht betroffen, obwohl es auch den Filterkriterien entsprach.
Der db.collection.updateMany() Methode
Die db.collection.updateMany() -Methode aktualisiert alle Dokumente, die dem angegebenen Filter für eine Sammlung entsprechen.
Verwenden wir die ursprünglichen Sammlungsdokumente:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
Wieder einmal können wir sehen, dass zwei Dokumente Dog haben als ihren type .
Wir können beide Dokumente gleichzeitig wie folgt aktualisieren:
db.pets.updateMany(
{ type: "Dog" },
{ $set: { type: "Cow" } }
) Ergebnis:
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 } Dies zeigt uns, dass zwei Dokumente übereinstimmen und zwei aktualisiert wurden.
Wir können die Sammlung überprüfen:
db.pets.find() Ergebnis:
{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Cow" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" } Der db.collection.update() Methode
Die db.collection.update() Methode kann ein einzelnes Dokument oder mehrere Dokumente in einer Sammlung aktualisieren.
Standardmäßig wird nur ein einzelnes Dokument aktualisiert. Aber wenn multi: true angegeben ist, aktualisiert es alle Dokumente, die den Abfragekriterien entsprechen.
Ein einzelnes Dokument aktualisieren
Lassen Sie uns wieder die ursprüngliche Sammlung von Dokumenten verwenden:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" } Wir könnten ein Dokument wie folgt aktualisieren:
db.pets.update(
{ type: "Dog" },
{ $set: { type: "Cow" } }
) Ergebnis:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) Nur ein Dokument wurde aktualisiert. Dies wird bestätigt, wenn wir die Sammlung abfragen.
db.pets.find() Ergebnis:
{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" } Mehrere Dokumente aktualisieren
Gehen wir noch einmal zurück zur ursprünglichen Dokumentensammlung:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
Und jetzt fügen wir multi: true hinzu zu unserem Aktualisierungsvorgang, um alle Dokumente zu aktualisieren, die den Abfragekriterien entsprechen:
db.pets.update(
{ type: "Dog" },
{ $set: { type: "Cow" } },
{ multi: true }
) Ergebnis:
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 }) Diesmal wurden also zwei Dokumente abgeglichen und aktualisiert.
Sehen wir uns noch einmal unsere Sammlung an:
db.pets.find() Ergebnis:
{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Cow" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
Wie erwartet haben beide Dokumente jetzt einen type von Cow .
Der db.collection.replaceOne() Methode
Die db.collection.replaceOne() -Methode ersetzt ein einzelnes Dokument innerhalb der Sammlung basierend auf dem Filter.
Wieder unter Verwendung der ursprünglichen Sammlung:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
Mal sehen, was passiert, wenn wir db.collection.replaceOne() verwenden Methode dagegen.
db.pets.replaceOne(
{ type: "Dog" },
{ type: "Cow" }
) Ergebnis:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } Ein Dokument wurde aktualisiert.
Schauen wir uns das mal an.
db.pets.find() Ergebnis:
{ "_id" : 1, "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
Dieses Mal wurde das gesamte Dokument durch das neue Dokument ersetzt (bis auf die _id Feld).
Diese Methode ersetzt das gesamte Dokument (bis auf die _id Feld).
Nach oben einfügen
Alle oben genannten Methoden akzeptieren einen upsert Argument, mit dem Sie eine Upsert-Operation ausführen können.
Wenn upsert: true , wird das Dokument aktualisiert, wenn es eine Übereinstimmung mit den Abfragekriterien gibt, aber wenn es keine Übereinstimmung gibt, wird ein neues Dokument eingefügt.
Beispiel:
db.pets.updateOne(
{ name: "Wag" },
{ $set: { type: "Cow" } },
{ upsert: true }
) Ergebnis:
{
"acknowledged" : true,
"matchedCount" : 0,
"modifiedCount" : 0,
"upsertedId" : ObjectId("5fe1d5aad991410169410165")
} In diesem Fall gab es keine Übereinstimmungen, also wurde ein Dokument eingefügt.
Sehen wir uns die Sammlung an.
db.pets.find() Ergebnis:
{ "_id" : 1, "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
{ "_id" : ObjectId("5fe1d5aad991410169410165"), "name" : "Wag", "type" : "Cow" }