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
{ 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
{ 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
{ 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
{ 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