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
Menge
auf500
. - Feld
details
mit neuem eingebettetem Dokument - Feld
tags
mit 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.