Fügen Sie Datensätze ein, wenn sie nicht in MongoDB vorhanden sind

Tahseen Tauseef 15 Februar 2024
  1. Upsert in MongoDB
  2. Upsert Mit der Methode findAndModify() in MongoDB
  3. Upsert Mit der update() Methode in MongoDB
  4. Upsert mit Operatorausdrücken in MongoDB
  5. Upsert mit Ersatzdokument in MongoDB
  6. Upsert mit der Aggregationspipeline in MongoDB
  7. Upsert mit gepunkteter _id-Abfrage in MongoDB
Fügen Sie Datensätze ein, wenn sie nicht in MongoDB vorhanden sind

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.

  1. Wenn ein Dokument oder die gefundenen Dokumente den angegebenen Suchkriterien entsprechen, aktualisiert die Methode findAndModify() das Dokument/die Dokumente.
  2. 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.

findandmodify-Methode

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.

  1. Wenn ein Dokument oder Dokumente gefunden werden, die den angegebenen Suchkriterien entsprechen, aktualisiert die Methode update() das Dokument/die Dokumente.
  2. 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.

Update-Methode

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.

Operatorausdruck

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})

Ersatzdokument

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})

Aggregationspipeline

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})

gepunktete Abfrage

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.