Aktualisierung von MongoDB-Dokumentdaten mit dem mongo shell

In diesem Kapitel wird die Aktualisierung von MongoDB-Dokumentdaten durch die mongo shell vorgestellt. MongoDB unterstützt verschiedene Aktualisierungsmethoden, die durch verschiedene Arten von Operatoren implementiert werden, und unterstützt auch mehrere Aktualisierungsfunktionen.

Vorbereiten von Testdaten

Fügen Sie eine Reihe von Testdaten in die Inventar-Sammlung ein.

db.inventory.insertMany( [
   { item: "Leinwand", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" },
   { item: "Journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "Matte", qty: 85, size: { h: 27.9, w: 35.5, uom: "cm" }, status: "A" },
   { item: "Maustpad", qty: 25, size: { h: 19, w: 22.85, uom: "cm" }, status: "P" },
   { item: "Notizbuch", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
   { item: "Papier", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "Planer", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "Postkarte", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
   { item: "Skizzenbuch", qty: 80, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "Skizzenblock", qty: 95, size: { h: 22.85, w: 30.5, uom: "cm" }, status: "A" }
] );

Syntax des Aktualisierungsoperators

Um Dokumente zu aktualisieren, stellt MongoDB mehrere Aktualisierungsoperatoren (z. B. $set) zur Modifizierung von Feldwerten bereit.

Das Format der Parameter des Aktualisierungsoperators ist wie folgt:

{
  <Aktualisierungsoperator>: { <Feld1>: <Wert1>, ... },
  <Aktualisierungsoperator>: { <Feld2>: <Wert2>, ... },
  ...
}

Erklärung:

  • : Aktualisierungsoperator
  • : Feldname
  • : Feldparameter

Der $set Operator

Wird verwendet, um Dokumente zu aktualisieren und ein neues Feld zu erstellen, wenn das Feld nicht existiert.

Aktualisieren eines einzelnen Dokuments

Aktualisieren Sie ein Dokument mit der Methode db.collection.updateOne().

db.inventory.updateOne(
   { item: "Papier" },
   {
     $set: { "size.uom": "cm", status: "P" },
     $currentDate: { lastModified: true }
   }
)

Aktualisierungserklärung:

  • Zuerst wird das erste Dokument anhand der Abfragebedingung (item = Papier) abgerufen.
  • Verwenden Sie den $set-Operator, um den Wert des Feldes size.uom auf cm zu aktualisieren und den Wert des Feldes status auf P zu aktualisieren.
  • Verwenden Sie den $currentDate-Operator, um den Wert des Feldes lastModified auf das aktuelle Datum zu aktualisieren. Wenn das Feld lastModified nicht existiert, wird $currentDate das Feld erstellen.

Aktualisieren mehrerer Dokumente

Verwenden Sie die Methode db.collection.updateMany(), um mehrere Dokumente zu aktualisieren, die der Bedingung entsprechen.

db.inventory.updateMany(
   { "qty": { $lt: 50 } },
   {
     $set: { "size.uom": "in", status: "P" },
     $currentDate: { lastModified: true }
   }
)

Aktualisierungserklärung:

  • Zuerst werden alle Dokumente anhand der Abfragebedingung (qty < 50) abgerufen.
  • Verwenden Sie den $set-Operator, um den Wert des Feldes size.uom auf in zu aktualisieren und den Wert des Feldes status auf P zu aktualisieren.
  • Verwenden Sie den $currentDate-Operator, um den Wert des Feldes lastModified auf das aktuelle Datum zu aktualisieren. Wenn das Feld lastModified nicht existiert, wird $currentDate das Feld erstellen.

Tipp: Der $lt-Operator bedeutet "kleiner als".

Dokument ersetzen

Verwende die db.collection.replaceOne() Methode, um den Inhalt eines Dokuments (außer des _id Feldes) zu ersetzen. Das Ersatzdokument kann unterschiedliche Felder als das Originaldokument haben. Da das _id Feld unveränderlich ist, kann es ausgelassen werden. Wenn jedoch das _id Feld eingeschlossen wird, muss der ID-Wert mit der ID des zu aktualisierenden Dokuments übereinstimmen.

db.inventory.replaceOne(
   { item: "paper" },
   { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
)

Erklärung:

  • Verwende zunächst die Abfragekriterien (item=paper), um das erste Dokument abzurufen.
  • Ersetze das übereinstimmende Dokument durch den Inhalt des zweiten Parameters der replaceOne Methode.

Aktualisierungsverhalten

Atomarität

Alle Schreibvorgänge in MongoDB sind atomar auf der Ebene des einzelnen Dokuments.

_id Feld

Das _id Feld ist unveränderlich und kann nicht aktualisiert werden.