Fügen Sie Datensätze ein, wenn sie nicht in MongoDB vorhanden sind
-
Upsert
in MongoDB -
Upsert
Mit der MethodefindAndModify()
in MongoDB -
Upsert
Mit derupdate()
Methode in MongoDB -
Upsert
mit Operatorausdrücken in MongoDB -
Upsert
mit Ersatzdokument in MongoDB -
Upsert
mit der Aggregationspipeline in MongoDB -
Upsert
mit gepunkteter_id
-Abfrage in MongoDB
In diesem Artikel wird das Einfügen von Datensätzen in MongoDB-Sammlungen kurz erläutert. Außerdem werden verschiedene Möglichkeiten zum Einfügen dieser Datensätze erläutert.
Außerdem werden kurz Upsert
und $setOninsert
behandelt.
Upsert
in MongoDB
Upsert
ist eine MongoDB-Option, die für Aktualisierungsvorgänge wie update()
, findAndModify()
usw. verwendet wird. Oder anders ausgedrückt: upsert
ist das Ergebnis der Kombination von update und insert (update + insert = upsert
).
Wenn der Wert der Option true
ist und das Dokument oder die Dokumente identifiziert werden, die mit der angegebenen Abfrage übereinstimmen, aktualisiert die Aktualisierungsaktion das übereinstimmende Dokument oder die übereinstimmenden Dokumente. Nehmen wir alternativ an, dass der Wert dieser Option true
ist und kein Dokument oder Dokumente mit dem bereitgestellten Dokument übereinstimmen.
In diesem Fall erstellt diese Option ein neues Dokument in der Sammlung mit den in Operation angegebenen Feldern. Der Wert der Operationsoption upsert
ist standardmäßig false
.
Wenn der upsert
-Wert in einer gemeinsamen Sammlung true
ist, müssen Sie den vollständigen gemeinsamen Schlüssel in den Filter aufnehmen.
Syntax:
upsert: <boolean>
Der Optionswert upsert
ist entweder true
oder false
.
Jetzt lernen Sie die Verwendung der Option upsert
kennen.
Upsert
Mit der Methode findAndModify()
in MongoDB
Mit der Funktion findAndModify()
können Sie die Option upsert
verwenden. Der Standardwert dieser Option in dieser Methode ist false
.
Wenn Sie den Wert dieser Option auf true
setzen, führt die Prozedur eine der folgenden Operationen durch.
- Wenn ein Dokument oder die gefundenen Dokumente den angegebenen Suchkriterien entsprechen, aktualisiert die Methode
findAndModify()
das Dokument/die Dokumente. - Wenn kein Dokument/Dokumente den angegebenen Abfragekriterien entsprechen, fügt die Methode
findAndModify()
ein neues Dokument in die Sammlung ein.
Syntax:
db.Collection_name.findAndModify(
{
selection_criteria:<document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>,
bypassDocumentValidation: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, … ]
})
Indem Sie den Wert der Option upsert
auf true
setzen, fügen Sie nun ein neues Dokument in die Sammlung employee
ein.
db.employee.findAndModify({query:{name:"Ram"},
update:{$set:{department:"Development"}},
upsert:true})
Hier wird der Wert der Option upsert
auf true
gesetzt; die Methode findAndModify()
fügt ein neues Dokument mit zwei Feldern (Name:
Ram und `Abteilung: `Entwicklung
) ein, weil kein Dokument mit dem Namen Ram
übereinstimmt.
Upsert
Mit der update()
Methode in MongoDB
Bei der Funktion update()
können Sie die Option upsert
verwenden. Der Standardwert dieses Parameters in dieser Funktion ist false
.
Wenn Sie den Wert dieser Option auf true
setzen, führt die Prozedur eine der folgenden Aktionen aus.
- Wenn ein Dokument oder Dokumente gefunden werden, die den angegebenen Suchkriterien entsprechen, aktualisiert die Methode
update()
das Dokument/die Dokumente. - Erfüllt kein Dokument die angegebenen Abfragekriterien, fügt die Funktion
update()
der Sammlung ein neues Dokument hinzu.
Erstellen Sie einen eindeutigen Index für das Namensfeld, um zu verhindern, dass MongoDB dasselbe Dokument mehr als einmal hinzufügt. Wenn zum Beispiel viele Dokumente dasselbe Update mit upsert: true
verlangen, fügt nur eine update
-Aktion erfolgreich ein neues Dokument mit einem eindeutigen Index ein.
Syntax:
db.Collection_name.update({Sele ction_ criteria}, {$set:{Update_data}}, {
upsert: <boo. lean >,
multi: <boo. lean>,
writeConcern: < document>,
collation: < document>,
arrayFilters: [ <filter document1>, … ],
hint: <document|string>
})
Indem Sie den Wert der Option upsert
auf true
ändern, fügen Sie ein neues Dokument in die Sammlung employee
ein.
db.employee.update({name:"Priya"}, {$set: {department: "HR"}},{upsert:true})
Da der Wert für die Option upsert
auf true
gesetzt ist, fügt die Funktion update()
ein neues Dokument mit zwei Feldern (name: "Priya"
und department: "HR"
) ein, weil kein Dokument vorhanden ist passt zum Namen Priya
.
Upsert
mit Operatorausdrücken in MongoDB
Angenommen, kein Dokument aus der angegebenen Sammlung entspricht dem Filter. In diesem Fall ist der update
-Parameter ein Dokument mit update
-Operatoren.
Der Wert der Option upsert
ist true
; Die Operation update
erstellt neue Dokumente basierend auf den Gleichheitsklauseln des angegebenen query
-Parameters und wendet die Ausdrücke des update
-Parameters an.
Oder anders ausgedrückt, wenn die Option upsert
true
ist und kein Dokument auf den angegebenen Filter passt, erstellt die Operation update
ein neues Dokument in der angegebenen Sammlung mit den in query
und angegebenen Feldern Dokumente aktualisieren
.
Beispiel:
Indem Sie den Wert der Option upsert
auf true
ändern, fügen Sie ein neues Dokument in die Sammlung example
ein.
db.example.update({Name: "Rekha"}, // Query parameter
{$set: {Phone: '7842235468 '}, // Update document
$setOnInsert: {Gender: 'Female'}},
{upsert: true})
Die Funktion update()
erzeugt ein neues Dokument mit dem Feld "Name: Rekha"
der Abfragebedingung und wendet die Aktionen $set
und $setOnInsert
an.
Upsert
mit Ersatzdokument in MongoDB
Angenommen, kein Dokument aus der bereitgestellten Sammlung entspricht dem Filter und der Parameter update
enthält ein Ersatzdokument, und der Wert des Dokuments upsert
ist auf true
gesetzt. Die Aktion Aktualisieren
fügt ein neues Dokument in die Sammlung ein, mit den im Ersatzdokument angegebenen Feldern.
MongoDB generiert kein eindeutiges _id
-Feld für das neue Dokument, wenn das Ersatzdokument ein _id
-Feld enthält. Wenn dem Ersatzdokument alternativ ein _id
-Feld fehlt, erstellt MongoDB ein neues _id
-Feld für das neue Dokument.
Beachten Sie, dass unterschiedliche _id
-Feldwerte im Abfrageparameter und im Ersetzungsdokument nicht zulässig sind. Wenn Sie dies tun, werden Sie auf Probleme stoßen.
Beispiel:
Indem Sie den Wert der Option upsert
auf true
setzen, fügen Sie nun ein neues Dokument in die Sammlung example
ein.
db.example.update({Name:"Hema"}, // Query parameter
{Name:"Hema", Phone:8332564578}, // Replacement document
{upsert:true})
Upsert
mit der Aggregationspipeline in MongoDB
Die Aggregationspipeline ist eine mehrstufige Pipeline, in der Dokumente als Eingabe akzeptiert und als resultierende Sammlung von Dokumenten produziert werden.
Die resultierenden Dokumente werden dann als Input genommen und im folgenden Schritt (falls vorhanden) bis zur letzten Stufe erstellt. Die Anzahl der Stufen in der Pipeline kann von eins
bis n
reichen.
Angenommen, kein Dokument passt zum angegebenen Filter und der Parameter update
enthält eine Aggregationspipeline, und der Wert der Option upsert
ist auf true
gesetzt. In diesem Fall fügt die Operation Aktualisieren
ein neues Dokument in die Sammlung ein.
Dieses neue Dokument wird mithilfe der Gleichheitsklausel im Parameter query
gebildet, und dann wird die Pipeline darauf angewendet, um das einzufügende Dokument zu erstellen.
Beispiel:
Indem Sie den Wert der Option upsert
auf true
setzen, fügen Sie nun ein neues Dokument in die Sammlung employee
ein.
db.employee.update({name:"Ram"}, [{$set: {department: "HR", age:31}}],{upsert:true})
Upsert
mit gepunkteter _id
-Abfrage in MongoDB
Sie haben gesehen, wie die Funktion update()
Daten in einer Sammlung abhängig von einer Abfrage ändern kann und wie die Option upsert
ein neues Feld hinzufügen kann, wenn keine passenden Dokumente gefunden werden.
upsert
mit einer gepunkteten _id
-Abfrage ist jedoch eine Ausnahme, und der Versuch, ein Dokument auf diese Weise einzufügen, würde zu einem Fehler von MongoDB führen.
Illustration:
Sehen Sie sich den folgenden Aktualisierungsvorgang an. Die Aktualisierung schlägt beim Erstellen des einzufügenden Dokuments fehl, da die Operation update
upsert: true
angibt und die Abfrage Bedingungen für das Feld _id
mit Punktnotation bereitstellt.
db.employee.update({"_id.name":"Roma", "_id.uid":0},{age:21}, {upsert:true})
In diesem Artikel wurde also das Problem des Einfügens von Datensätzen in leere Felder in MongoDB behandelt. Upsert
wird kurz mit verschiedenen Szenarien erklärt.