Starten von Mongo 4.2
, db.collection.update()
kann eine Aggregationspipeline akzeptieren und schließlich die Aktualisierung/Erstellung eines Felds basierend auf einem anderen Feld ermöglichen:
// { a: "Hello", b: "World" }
// { a: "Olleh", b: "Dlrow" }
db.collection.update(
{},
[ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ],
{ multi: true }
)
// { a: "Hello", b: "World", active: true }
// { a: "Olleh", b: "Dlrow", active: false }
-
Der erste Teil
{}
ist die Übereinstimmungsabfrage, die filtert, welche Dokumente aktualisiert werden sollen (in unserem Fall alle Dokumente). -
Der zweite Teil
[ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ]
ist die Update-Aggregationspipeline (beachten Sie die eckigen Klammern, die die Verwendung einer Aggregationspipeline anzeigen).$set
ist ein neuer Aggregationsoperator und ein Alias von$addFields
. Dann kann jeder Aggregationsoperator innerhalb des$set
verwendet werden Bühne; in unserem Fall eine bedingte Gleichheitsprüfung, von der der zu verwendende Wert für den neuenactive
abhängt Feld. -
Vergessen Sie nicht
{ multi: true }
, andernfalls wird nur das erste übereinstimmende Dokument aktualisiert.