MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

4 Möglichkeiten zum Aktualisieren eines Dokuments in MongoDB

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