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" }