MongoDB $Set-Operator
- 
          
            MongoDB-Operator $set.
- Legen Sie Felder der obersten Ebene fest
- Felder in eingebetteten Dokumenten festlegen
- Elemente in Arrays setzen
- 
          
            $set(Aggregation)
- 
          
            Verwenden Sie zwei $set-Stufen
- Hinzufügen von Feldern zu einem eingebetteten Dokument
- Überschreiben Sie ein vorhandenes Feld
- Element zu einem Array hinzufügen
 
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.
- Wert von Mengeauf500.
- Feld detailsmit neuem eingebettetem Dokument
- Feld tagsmit einem neuen Array
Das Ergebnis für die obige Abfrage ist im folgenden Screenshot dargestellt.

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.

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.

$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.

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.

Ü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.

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.

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.