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

MongoDB-Update mit Bedingung

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 neuen active abhängt Feld.

  • Vergessen Sie nicht { multi: true } , andernfalls wird nur das erste übereinstimmende Dokument aktualisiert.