MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB-bulkWrite()

In MongoDB die db.collection.bulkWrite() -Methode führt mehrere Schreibvorgänge mit Steuerelementen für die Ausführungsreihenfolge durch.

Massenschreibvorgänge wirken sich auf eine einzelne Sammlung aus. Die collection part ist der Name der Sammlung, mit der die Operationen durchgeführt werden sollen.

Massenschreibvorgänge

Die db.collection.bulkWrite() Methode kann verwendet werden, um die folgenden Schreiboperationen auszuführen:

  • insertOne
  • updateOne
  • updateMany
  • replaceOne
  • deleteOne
  • deleteMany

Jede dieser Methoden kann in einen Aufruf von db.collection.bulkWrite() eingeschlossen werden , und Sie können verschiedene Methoden in denselben Aufruf einbeziehen.

Beispiel

Hier ist ein Beispiel für die Verwendung von db.collection.bulkWrite() um einen Massenschreibvorgang für eine Sammlung namens pets durchzuführen :

Angenommen, wir fügen die folgenden Dokumente in eine Sammlung namens pets ein :

db.pets.insertMany([
    { _id: 1, name: "Wag", type: "Dog", weight: 20 },
    { _id: 2, name: "Bark", type: "Dog", weight: 10 },
    { _id: 3, name: "Meow", type: "Cat" },
    { _id: 4, name: "Scratch", type: "Cat" },
    { _id: 5, name: "Bruce", type: "Bat" }
    ])

Wir können jetzt db.collection.bulkWrite() verwenden um einen Massenschreibvorgang für diese Sammlung durchzuführen.

Beispiel:

db.pets.bulkWrite([
    { insertOne: { "document": { "_id": 6, "name": "Bubbles", "type": "Fish" }}},
    { updateOne : {
        "filter" : { "_id" : 2 },
        "update" : { $set : { "weight" : 15 } }
    } },
    { deleteOne : { "filter" : { "_id" : 5 } } },
    { replaceOne : {
        "filter" : { "_id" : 4 },
        "replacement" : { "name" : "Bite", "type" : "Dog", "weight": 5 }
    } }
])

Ergebnis:

{
	"acknowledged" : true,
	"deletedCount" : 1,
	"insertedCount" : 1,
	"matchedCount" : 2,
	"upsertedCount" : 0,
	"insertedIds" : {
		"0" : 6
	},
	"upsertedIds" : {
		
	}
}

In diesem Fall haben wir ein Dokument eingefügt, ein anderes Dokument aktualisiert, ein anderes gelöscht und ein anderes Dokument ersetzt.

Die db.collection.bulkWrite() -Methode gibt Folgendes zurück:

  • Ein boolescher acknowledged als true ob die Operation mit Write Concern oder false ausgeführt wurde wenn Schreibschutz deaktiviert war.
  • Eine Zählung für jeden Schreibvorgang.
  • Ein Array, das eine _id enthält für jedes erfolgreich eingefügte oder aktualisierte Dokument.

Ergebnis anzeigen

Schauen wir uns nun noch einmal die Dokumente in der Sammlung an.

db.pets.find()

Ergebnis:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 15 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
{ "_id" : 4, "name" : "Bite", "type" : "Dog", "weight" : 5 }
{ "_id" : 6, "name" : "Bubbles", "type" : "Fish" }

Wir können sehen, dass alle Änderungen wie angegeben vorgenommen wurden.

Der ordered Parameter

Massenschreiboperationen können entweder geordnet oder ungeordnet sein. Standardmäßig sind sie geordnet.

Sie können die Reihenfolge angeben, indem Sie den geordneten booleschen Parameter verwenden. Bereitstellen eines Werts von true macht es zu einer geordneten Liste von Operationen, indem es auf false gesetzt wird macht es zu einer ungeordneten Liste von Operationen.

Mit einer geordneten Liste von Operationen führt MongoDB die Operationen seriell aus. Wenn während der Verarbeitung einer der Schreiboperationen ein Fehler auftritt, kehrt MongoDB zurück, ohne verbleibende Schreiboperationen in der Liste zu verarbeiten.

Mit einer ungeordneten Liste von Operationen kann MongoDB die Operationen parallel ausführen (obwohl dies nicht garantiert ist). Wenn während der Verarbeitung einer der Schreiboperationen ein Fehler auftritt, verarbeitet MongoDB die verbleibenden Schreiboperationen in der Liste weiter.

Weitere Informationen

Die db.collection.bulkWrite() -Methode akzeptiert auch ein writeConcern -Argument, das die Bestätigungsstufe beschreibt, die von MongoDB für Schreibvorgänge angefordert wird.

Siehe die MongoDB-Dokumentation für db.collection.bulkWrite() für weitere Informationen.