Unterschied zwischen $push und $addToSet in MongoDB
In diesem Artikel wird erläutert, welche Operatoren in MongoDB enthalten sind. Wofür werden die Operatoren $push
und $addToSet
verwendet?
Zusätzlich wird der Unterschied zwischen diesen beiden Operatoren mit Codesegmenten angegeben. Dieser Artikel behandelt die folgenden Themen.
- Operatoren in MongoDB
$push
in MongoDB$addToSet
in MongoDB
Operatoren in MongoDB
Operatoren sind spezielle Symbole oder Schlüsselwörter, die einen Compiler oder Interpreter anweisen, mathematische oder logische Operationen auszuführen.
Die Abfrageoperatoren verbessern die Funktionalität von MongoDB, indem sie es Entwicklern ermöglichen, komplexe Abfragen zu erstellen, um mit Datensätzen zu interagieren, die zu ihren Anwendungen passen.
Im Folgenden werden verschiedene Arten von Operatoren in MongoDB erläutert.
- Abfrage- und Projektionsoperatoren – Abfrageoperatoren helfen beim Auffinden von Daten in einer Datenbank, während Projektionsoperatoren ändern, wie Daten angezeigt werden.
- Update-Operatoren – Update-Operatoren ermöglichen es Ihnen, Daten zu Ihrer Datenbank zu ändern oder hinzuzufügen.
- Aggregation Pipeline Stages – Verfügbare Aggregationsstufen für die Aggregation Pipeline.
- Aggregations-Pipeline-Operatoren – Aggregations-Pipeline-Operationen verfügen über eine Sammlung von Operatoren, die zum Definieren und Bearbeiten von Dokumenten in Pipeline-Stufen verfügbar sind.
- Abfragemodifikatoren – Abfragemodifikatoren bestimmen, wie Abfragen ausgeführt werden.
$push
-Operator in MongoDB
Der Operator $push
in MongoDB wird verwendet, um einen bestimmten Wert an ein Array anzuhängen. Eine Art Update-Operator ist der $push
-Operator.
Wenn das angegebene Feld im zu aktualisierenden Dokument nicht vorhanden ist, fügt der Operator $push
es als neues Feld mit dem angegebenen Wert als Element hinzu. Der Vorgang ist fehlgeschlagen, wenn das Aktualisierungsfeld nicht vom Array-Typ war.
Wenn der Wert ein Array ist, hängt der Operator $push
beim Aktualisieren das gesamte Array als einzelnes Element an. Wenn Sie jedes Wertelement einzeln hinzufügen möchten, verwenden Sie den Operator $push
mit dem Modifikator $each
.
Syntax:
db.collection.update( <query>,{ $push: { <field>: <value> } })
Die folgende Datenbanksammlung wird in allen Beispielen verwendet.
Beispielsammlung:
db={
"student": [
{
"_id": 1,
"sem": 1,
"subjects": [
"phys",
"chem",
"maths",
"gkn",
"stat",
"astro"
],
"achieve": [
70,
87,
90,
90,
65,
81
]
}
]
}
Beispiel für den MongoDB-Operator $push
.
Wenn Sie 95 an das Array-Feld anhängen möchten, das ausgeführt wird, wenn die Bedingung subjects
"maths"
ist, können wir den MongoDB-Befehl unten verwenden.
db.student.update( { "subjects" : "maths" },{ $push: { "achieve": 95 } });
Da das im vorangegangenen Beispiel beschriebene Kriterium mit dieser Aktion übereinstimmt, wird der Wert 95 an das Array completed angehängt.
So sehen Sie sich das neu aktualisierte Dokument an:
db.student.find().pretty();
Die Ausgabe der oben angegebenen Abfrage ist in diesem Screenshot zu sehen.
Beispiel für MongoDB $push
, wenn das Feld kein Array ist
Wenn Sie 2 zur Spalte sem
hinzufügen möchten, die kein Array-Typ-Feld ist, können wir den MongoDB-Befehl unten verwenden.
db.student.update( { "subjects" : "maths" },{ $push: { "sem": 2 } });
Da das Feld sem
im obigen Beispiel nicht vom Typ Array ist, schlägt die Operation fehl und führt zu folgendem Ergebnis.
Cannot apply $push/$push All modifier to non-array
Beispiel für MongoDB $push
mit $each
-Modifikatoren
Wenn wir viele Einträge oder mehr als ein Element (77,49,83
) an das Array anhängen möchten, das für den dokumentierten Schüler erstellt wurde, wobei die Bedingung Fächer
"Mathematik"
ist, können wir den MongoDB-Befehl unten verwenden.
db.student.update( { "subjects" : "maths" },{ $push: { "achieve": {$each : [77,49,83 ]} } });
Der $each
-Modifikator wurde im obigen Beispiel verwendet, um mehrere Einträge 77,49,83
an das Array-Ergebnis anzuhängen, das dem Kriteriumsthema "maths"
entspricht.
So sehen Sie sich das neu aktualisierte Dokument an:
db.student.find().pretty();
Die Ausgabe der oben angegebenen Abfrage ist in diesem Screenshot zu sehen.
$addToSet
in MongoDB
Der Operator $addToSet
fügt einem Array nur dann einen Wert hinzu oder hängt ihn an, wenn der Wert noch nicht im Array existiert. Wenn sich der Wert bereits im Array befindet, gibt $addToSet
dasselbe Array zurück, ohne es zu ändern.
Der Operator $addToSet
stellt sicher, dass es keine doppelten Einträge in einem Array gibt, wenn es aktualisiert wird; Die Reihenfolge der Elemente in einer Anzeige kann jedoch geändert werden, nachdem ein Wert hinzugefügt wurde.
Syntax:
db.collection.update( { <field>: <value> }, { $addToSet: { <field>: <addition> } } );
Oben verwendete Sammlung:
{ "_id" : 1, "sem" : 1, "achieve" : [ 80, 70, 90 ] }
Beispiel für $addToSet
zum Anhängen eines Werts
Wenn wir den Wert 92 an das Array anhängen möchten, können wir den folgenden MongoDB-Befehl verwenden.
db.student.update( { "sem": 1}, { $addToSet: { "achieve": 92 } } );
Der vorhergehende Code fügt 92 an das Array-Feld complete
an.
So sehen Sie sich das neu aktualisierte Dokument an:
db.student.find().pretty();
Ausgabe des Befehls:
{ "_id" : 1, "achieve" : [ 70, 80, 90, 92 ], "sem" : 1 }
Beispiel für $addToSet
zum Hinzufügen mehrerer Werte mit dem Modifikator $each
Der folgende MongoDB-Befehl kann die Zahlen 10 und 11 an das Array-Feld anhängen.
db.student.update( { "sem": 1}, { $addToSet: { "achieve":{$each:[10,11]}}});
Im obigen Beispiel wurden die Nummern 10 und 11 an das Array-Feld angehängt, das mit dem Modifikator $each
erreicht wurde.
So sehen Sie sich das neu aktualisierte Dokument an:
db.student.find().pretty();
Die Ausgabe der oben angegebenen Abfrage ist in diesem Screenshot zu sehen.