MongoDB Dokumente aktualisieren

In MongoDB kann der Vorgang zum Aktualisieren von Dokumenten mit mehreren Methoden implementiert werden. Häufig verwendete Methoden sind:updateOne(), updateMany(), replaceOne() und findOneAndUpdate()。

1、updateOne()

Die Methode updateOne() wird verwendet, um ein einzelnes Dokument zu aktualisieren, das dem Filter entspricht.

Syntax:

db.collection.updateOne(filter, update, options)
  • filter: Die Abfragebedingung zum Auffinden von Dokumenten.
  • update: Gibt das Dokument oder den Update-Operator für die Aktualisierungsoperation an.
  • options: Optionales Parameterobjekt, wie z. B.upsert、arrayFiltersusw.

Beispiel

db.myCollection.updateOne(
    { name: "Alice" },                // Filterbedingung
    { $set: { age: 26 } },            // Aktualisierungsoperation
    { upsert: false }                 // Optionale Parameter
);

2. updateMany()

Die Methode updateMany() wird verwendet, um alle Dokumente zu aktualisieren, die dem Filter entsprechen.

Syntax:

db.collection.updateMany(filter, update, options)
  • filter: Die Abfragebedingung zum Auffinden von Dokumenten.
  • update: Gibt das Dokument oder den Update-Operator für die Aktualisierungsoperation an.
  • options: Optionales Parameterobjekt, wie z. B.upsert、arrayFiltersusw.

Beispiel

db.myCollection.updateMany(
    { age: { $lt: 30 } },             // Filterbedingung
    { $set: { status: "active" } },   // Aktualisierungsoperation
    { upsert: false }                  // Optionale Parameter
);

3. replaceOne()

Die Methode replaceOne() wird verwendet, um ein einzelnes Dokument zu ersetzen, das dem Filter entspricht. Das neue Dokument ersetzt das alte Dokument vollständig.

Syntax:

db.collection.replaceOne(filter, replacement, options)
  • filter: Die Abfragebedingung zum Auffinden von Dokumenten.
  • replacement: Das neue Dokument, das das alte Dokument ersetzt.
  • options: Optionales Parameterobjekt, wie z. B.upsertusw.

Beispiel

db.myCollection.replaceOne(
{ name: "Bob" }, // Filterbedingung
{ name: "Bob", age: 31 } // Neues Dokument
);

4、findOneAndUpdate()

Die Methode findOneAndUpdate() wird verwendet, um ein einzelnes Dokument zu finden und zu aktualisieren, und kann optional das Dokument vor oder nach der Aktualisierung zurückgeben.

Syntax:

db.collection.findOneAndUpdate(filter, update, options)
  • filter: Die Abfragebedingung zum Auffinden von Dokumenten.
  • update: Gibt das Dokument oder den Update-Operator für die Aktualisierungsoperation an.
  • options: Optionales Parameterobjekt, wie z. B.projection、sort、upsert、returnDocumentusw.

Beispiel

db.myCollection.findOneAndUpdate(
    { name: "Charlie" },              // Filterbedingung
    { $set: { age: 36 } },            // Aktualisierungsoperation
    { returnDocument: "after" }       // Optionale Parameter, gibt das aktualisierte Dokument zurück
);

Optionsparameter

Der Parameter options dieser Update-Methoden kann normalerweise die folgenden Optionen enthalten:

  • upsert: Gibt an, ob ein neues Dokument eingefügt werden soll, wenn kein passendes Dokument gefunden wird.
  • arrayFilters: Gibt beim Aktualisieren verschachtelter Arrays die Bedingung für die Array-Elemente an, die aktualisiert werden sollen.
  • collation: Gibt die Kollation an, die beim Vergleich von Zeichenfolgen verwendet werden soll.
  • returnDocument: Wird in findOneAndUpdate verwendet und gibt an, ob das Dokument vor der Aktualisierung ("before") oder nach der Aktualisierung ("after") zurückgegeben werden soll.

Einfaches Beispiel

Ein einzelnes Dokument aktualisieren:

db.myCollection.updateOne(
    { name: "Alice" },
    { $set: { age: 26 } }
);

Mehrere Dokumente aktualisieren:

db.myCollection.updateMany(
    { age: { $lt: 30 } },
    { $set: { status: "active" } }
);

Ein einzelnes Dokument ersetzen:

db.myCollection.replaceOne(
    { name: "Bob" },
    { name: "Bob", age: 31 }
);

Ein einzelnes Dokument suchen und aktualisieren:

db.myCollection.findOneAndUpdate(
    { name: "Charlie" },
    { $set: { age: 36 } },
    { returnDocument: "after" }
);

Im folgenden Beispiel haben wir die Dokumentdaten mit _id 56064f89ade2f21f36b03136 ersetzt:

>db.col.save({
    "_id" : ObjectId("56064f89ade2f21f36b03136"),
    "title" : "MongoDB",
    "description" : "MongoDB 是一个 Nosql 数据库",
    "by" : "Example",
    "url" : "http://www.example.com",
    "tags" : [
            "mongodb",
            "NoSQL"
    ],
    "likes" : 110
})

Nach erfolgreichem Ersetzen können wir den Befehl find() verwenden, um die ersetzten Daten anzuzeigen.

>db.col.find().pretty()
{
        "_id" : ObjectId("56064f89ade2f21f36b03136"),
        "title" : "MongoDB",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "Example",
        "url" : "http://www.example.com",
        "tags" : [
                "mongodb",
                "NoSQL"
        ],
        "likes" : 110
}
> 

Weitere Beispiele

Nur den ersten Datensatz aktualisieren:

db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );

Alle aktualisieren:

db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );

Nur den ersten Datensatz einfügen:

db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );

Alle einfügen:

db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );

Alle aktualisieren:

db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );

Nur den ersten Datensatz aktualisieren:

db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
Andere Erweiterungen