Upsert in MongoDB
-
die
upsert
-Abfrage in MongoDB -
Verwenden Sie die
upsert
-Abfrage mit derupdate()
-Methode -
Verwenden Sie die
upsert
-Abfrage mit derfindAndModify()
-Methode -
Andere Methoden, die
upsert
unterstützen
In MongoDB kombiniert upsert
die Befehle update
und insert
. Es kann in den Operationen update()
und findAndModify()
verwendet werden.
die upsert
-Abfrage in MongoDB
upsert
nimmt einen einzelnen booleschen Parameter. Wenn es auf TRUE
gesetzt ist und ein Abfragedokument gefunden wird, wird es das Dokument aktualisieren; wenn es nicht gefunden wird, fügt es ein neues Dokument in die Sammlung ein.
Syntax:
upsert: <boolean>
Verwenden Sie die upsert
-Abfrage mit der update()
-Methode
Angenommen, Sie haben das folgende Dokument für den Mitarbeiter
. Um die Dokumente anzuzeigen, geben Sie den folgenden Befehl in Mongosh oder MongoCLI ein (nachdem Sie sich erfolgreich mit der Datenbank verbunden haben):
> db.employee.find().pretty()
{"_id":1, "name":"Alice"}
{"_id":2, "name":"Bob"}
Hier wird find()
zum Suchen von Dokumenten oder Objekten verwendet. Wir können ihm auch Parameter übergeben.
Wenn Sie beispielsweise find({"_id":1})
schreiben, wird nur das Objekt mit der ID 1
zurückgegeben. pretty()
dient zum Drucken der Ausgabe in einem schönen Format.
Wenn Sie nun versuchen, wie folgt zu aktualisieren:
> db.employee.update({_id:5},{name: "Jhon"})
WriteResult({"nMatched": 0, "nUpserted": 0, "nModified": 0})
Wie wir dem WriteResult
entnehmen können, wurde kein Dokument aktualisiert. Probieren Sie nun die Option upsert
mit dem Wert TRUE
aus.
Angenommen, Sie möchten nach einem Namen suchen und ihn aktualisieren. Sie möchten beispielsweise alle Namen Sam
mit der Option upsert
in Samuel
aktualisieren.
Die Abfrage sieht wie folgt aus:
> db.employee.update({name:"Sam"},{name: "Samuel"})
WriteResult({
"nMatched": 0,
"nUpserted": 1,
"nModified": 0,
"_id": ObjectId("67874504aed8aee9986")
})
>
Hier sehen Sie, dass der upserted
-Wert 1
ist. Da es keine Übereinstimmung für den Namen Sam
gibt, wurde eine Entität mit einer eindeutigen _id
dafür erstellt.
Wenn Sie nun alle Entitäten unter Mitarbeiter
anzeigen möchten, können Sie die folgende Abfrage ausführen:
> db.employee.find().pretty()
{"_id":1, "name":"Alice"}
{"_id":2, "name":"Bob"}
{"_id":ObjectId("67874504aed8aee9986"), "name":"Samuel"}
>
Verwenden Sie die upsert
-Abfrage mit der findAndModify()
-Methode
Diese Methode funktioniert genauso wie die Methode update()
, aber findAndModify
aktualisiert nur das erste übereinstimmende Objekt, während update
alle übereinstimmenden Entitäten ändert.
Angenommen, wir möchten ein neues Feld hinzufügen, dessen ID gleich 3
ist. Wir werden Folgendes schreiben:
db.employee.findAndModify({query: {_id:3}, update:{$inc: {salary: 1500}}, upsert: true})
null
>
Es gibt null
zurück, weil es nie existiert hat.
Wenn wir alle Entitäten anzeigen, können wir sehen, dass ein neues Objekt zu den Dokumenten hinzugefügt wird, da das upsert
auf TRUE
gesetzt wurde. Es fügte eine neue Entität mit einer ID von 3
und einem Gehalt von 1500
hinzu.
> db.employee.find().pretty()
{"_id":1, "name":"Alice"}
{"_id":2, "name":"Bob"}
{"_id":ObjectId("67874504aed8aee9986"), "name":"Samuel"}
{"_id":5, "salary":"1500"}
Andere Methoden, die upsert
unterstützen
Wir können die Option upsert
auch in den folgenden Methoden verwenden:
updateOne()
replaceOne()
Sie können diesen Blog besuchen, um mehr zu erfahren. Hier ist auch die offizielle Dokumentation von MongoDB.