MongoDB $Set-Operator

Tahseen Tauseef 15 Februar 2024
  1. MongoDB-Operator $set.
  2. Legen Sie Felder der obersten Ebene fest
  3. Felder in eingebetteten Dokumenten festlegen
  4. Elemente in Arrays setzen
  5. $set (Aggregation)
  6. Verwenden Sie zwei $set-Stufen
  7. Hinzufügen von Feldern zu einem eingebetteten Dokument
  8. Überschreiben Sie ein vorhandenes Feld
  9. Element zu einem Array hinzufügen
MongoDB $Set-Operator

Mithilfe dieses Artikels erfahren Sie, wie Sie den Operator $set verwenden, um ein Objekt in MongoDB teilweise zu aktualisieren, damit das neue Objekt das vorhandene überlagert/mit diesem zusammenführt.

Der Operator $set ersetzt den Wert eines Feldes durch den angegebenen Wert. Der Operatorausdruck $set verwendet die folgende Syntax.

{ $set: { <field1>: <value1>, ... } }

Sie geben ein <Feld> in einem eingebetteten Dokument oder einem Array mit der Punktnotation an.

MongoDB-Operator $set.

Wenn das Feld nicht existiert, erstellt der Operator $set eines mit dem angegebenen Wert, solange das neue Feld keine Einschränkung verletzt.

Wenn Sie beispielsweise einen gepunkteten Pfad für ein nicht vorhandenes Feld angeben, generiert der Operator $set die eingebetteten Dokumente nach Bedarf, um den gepunkteten Pfad zu vervollständigen.

Darüber hinaus aktualisiert oder erstellt der Operator $set jedes Feld, wenn Sie mehrere Feld-Wert-Paare angeben.

Sie können die folgende Produkt-Kollektion erstellen.

db={
  "products": [
    {
      _id: 100,
      quantity: 250,
      instock: true,
      reorder: false,
      details: {
        model: "PTI",
        make: "Breakout"
      },
      tags: [
        "jeans",
        "clothing"
      ],
      ratings: [
        {
          by: "CustomerIK",
          rating: 3
        }
      ]
    }
  ]
}

Legen Sie Felder der obersten Ebene fest

Für das Dokument, das dem Kriterium _id gleich 100 entspricht, verwendet die nachstehende Operation den Operator $set, um den Wert der Felder details, Menge und tags zu aktualisieren. Die Abfrage dazu ist unten angegeben.

db.products.update(
   { _id: 100 },
   { $set:
      {
        quantity: 500,
        details: { model: "2600", make: "Outfitters" },
        tags: [ "coats", "outerwear", "clothing" ]
      }
   }
)

Die obige Operation aktualisiert Folgendes.

  1. Wert von Menge auf 500.
  2. Feld details mit neuem eingebettetem Dokument
  3. Feld tags mit einem neuen Array

Das Ergebnis für die obige Abfrage ist im folgenden Screenshot dargestellt.

Legen Sie Felder der obersten Ebene fest

Felder in eingebetteten Dokumenten festlegen

Sie verwenden die Punktnotation, um ein <Feld> in einem eingebetteten Dokument oder einem Array anzugeben. Für das Dokument, das dem Kriterium _id gleich 100 entspricht, aktualisiert die folgende Operation das Feld make im Dokument details.

Die Abfrage dazu ist unten angegeben.

db.products.update(
   { _id: 100 },
   { $set: { "details.make": "Breakout Kids" } }
)

Das Ergebnis für die obige Abfrage ist im folgenden Screenshot dargestellt.

Felder in eingebetteten Dokumenten festlegen

Elemente in Arrays setzen

Die folgende Aktion ändert den Wert im zweiten Element (Array-Index von 1) des Felds tags und das Feld rating im ersten Element (Array-Index von 0) des Arrays ratings für die Dokument, das die Kriterien _id gleich 100 erfüllt.

Die Abfrage dazu ist unten angegeben.

db.products.update(
   { _id: 100 },
   { $set:
      {
        "tags.1": "wind breaker",
        "ratings.0.rating": 2
      }
   }
)

Das Ergebnis für die obige Abfrage ist im folgenden Screenshot dargestellt.

Elemente in Arrays setzen

$set (Aggregation)

$set (Aggregation) fügt einem Dokument neue Felder hinzu. $set gibt Dokumente aus, die alle vorhandenen Felder aus den Eingabedokumenten und neu hinzugefügte Felder enthalten.

$set (Aggregation) hat die folgende Syntax.

{ $set: { <newField>: <expression>, ... } }

$set ist ein Befehl, der einem bestehenden Dokument neue Felder hinzufügt. Der Benutzer kann eine oder mehrere $set-Stufen in eine Aggregationsoperation einbeziehen.

Verwenden Sie die Punktnotation, um Felder oder Felder zu eingebetteten Dokumenten (einschließlich Dokumenten in Arrays) hinzuzufügen. Verwenden Sie $concatArrays, um einem bestehenden Array-Feld mit $set ein Element hinzuzufügen.

Verwenden Sie zwei $set-Stufen

Erstellen Sie mit den folgenden Beispielen eine Noten-Sammlung.

db={
  "grades": [
    {
      _id: 1,
      student: "Ali",
      homework: [10, 8, 9],
      quiz: [9, 8],
      extraCredit: 3
    },
    {
      _id: 2,
      student: "Manahil",
      homework: [3, 8, 5],
      quiz: [7, 9],
      extraCredit: 6
    }
  ]
}

Zwei $set-Schritte werden im folgenden Prozess verwendet, um drei neue Felder zu den Ausgabedokumenten hinzuzufügen. Die Abfrage dazu ist unten angegeben.

db.grades.aggregate( [
   {
     $set: {
        totalHomework: { $sum: "$homework" },
        totalQuiz: { $sum: "$quiz" }
     }
   },
   {
     $set: {
        totalScore: { $add: [ "$totalHomework", "$totalQuiz", "$extraCredit" ] } }
   }
] )

Der Vorgang gibt die folgenden Dokumente zurück, wie im folgenden Screenshot gezeigt.

Verwenden Sie zwei festgelegte Stufen

Hinzufügen von Feldern zu einem eingebetteten Dokument

Erstellen Sie eine Musterkollektion transport mit dem Folgenden.

db={
  "transport": [
    {
      _id: 1,
      type: "sedan",
      specs: { doors: 4, wheels: 4}
    },
    {
      _id: 2,
      type: "motorbike",
      specs: {doors: 0, wheels: 2}
    },
    {
      _id: 3,
      type: "jet ski"
    }
  ]
}

Die folgende Aggregationsoperation erstellt ein neues Feld fuel_type im eingebetteten Dokument specs. Die Abfrage dazu ist unten angegeben.

db.transport.aggregate( [
   { $set: { "specs.fuel_type": "super" } }
] )

Die Operation gibt die folgenden Ergebnisse zurück, wie im folgenden Screenshot gezeigt.

Hinzufügen von Feldern zu einem eingebetteten Dokument

Überschreiben Sie ein vorhandenes Feld

Wenn eine $set-Operation einen bestehenden Feldnamen angibt, wird das ursprüngliche Feld ersetzt. Stellen Sie mit den folgenden Artikeln eine Musterkollektion Haustiere zusammen.

db={
  "pets": [
    {
      _id: 1,
      dogs: 10,
      cats: 5
    }
  ]
}

Die folgende Operation $set überschreibt das Feld cats. Die Abfrage dazu ist unten angegeben.

db.pets.aggregate( [
  { $set: { "cats": 20 } }
] )

Der Vorgang gibt das folgende Dokument zurück, wie im folgenden Screenshot gezeigt.

Überschreiben Sie ein vorhandenes Feld

Element zu einem Array hinzufügen

Erstellen Sie eine Beispielsammlung Noten mit den folgenden Datensätzen.

db={
  "grades": [
    {
      _id: 1,
      student: "Ali",
      homework: [10, 8, 9],
      quiz: [9, 8],
      extraCredit: 3
    },
    {
      _id: 2,
      student: "Manahil",
      homework: [3, 8, 5],
      quiz: [7, 9],
      extraCredit: 6
    }
  ]
}

Der Benutzer kann den $set-Operator mit einem $concatArrays-Ausdruck verwenden. Dies fügt einem bestehenden Array-Feld ein Element hinzu.

Die folgende Operation verwendet $set, um das Feld homework durch ein neues Array zu ersetzen, dessen Elemente das aktuelle homework-Array sind, das mit einem anderen Array verkettet ist, das eine neue Punktzahl [ 7 ] enthält. Die Abfrage dazu ist unten angegeben.

db.grades.aggregate([
   { $match: { _id: 2 } },
   { $set: { homework: { $concatArrays: [ "$homework", [ 7 ] ] } } }
])

Der Vorgang gibt das folgende Dokument zurück, wie im folgenden Screenshot gezeigt.

Element zu einem Array hinzufügen

In diesem Artikel haben Sie gelernt, wie Sie den Operator $set verwenden, um ein Objekt in MongoDB teilweise zu aktualisieren, sodass das neue Objekt mit dem vorhandenen überlagert/zusammengeführt wird.

Verwandter Artikel - MongoDB Operator