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.