In MongoDB de db.collection.bulkWrite()
methode voert meerdere schrijfbewerkingen uit met besturingselementen voor de volgorde van uitvoering.
Bulkschrijfbewerkingen zijn van invloed op één verzameling. De collection
deel is de naam van de verzameling waarmee de bewerkingen moeten worden uitgevoerd.
Bulkschrijfbewerkingen
De db.collection.bulkWrite()
methode kan worden gebruikt om de volgende schrijfbewerkingen uit te voeren:
insertOne
updateOne
updateMany
replaceOne
deleteOne
deleteMany
Elk van deze methoden kan worden opgenomen in een aanroep van db.collection.bulkWrite()
, en u kunt verschillende methoden in dezelfde aanroep opnemen.
Voorbeeld
Hier is een voorbeeld van het gebruik van db.collection.bulkWrite()
om een bulkschrijfbewerking uit te voeren tegen een verzameling genaamd pets
:
Stel dat we de volgende documenten invoegen in een verzameling met de naam pets
:
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" }
])
We kunnen nu db.collection.bulkWrite()
. gebruiken om een bulkschrijfbewerking uit te voeren tegen die verzameling.
Voorbeeld:
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 }
} }
])
Resultaat:
{ "acknowledged" : true, "deletedCount" : 1, "insertedCount" : 1, "matchedCount" : 2, "upsertedCount" : 0, "insertedIds" : { "0" : 6 }, "upsertedIds" : { } }
In dit geval hebben we een document ingevoegd, een ander document bijgewerkt, een ander verwijderd en een ander document vervangen.
De db.collection.bulkWrite()
methode geeft het volgende terug:
- Een boolean
acknowledged
alstrue
als de bewerking werd uitgevoerd met schrijfproblemen offalse
als schrijfzorg was uitgeschakeld. - Een telling voor elke schrijfbewerking.
- Een array met een
_id
voor elk succesvol ingevoegd of geüpdatet document.
Bekijk het resultaat
Laten we nu nog eens kijken naar de documenten in de collectie.
db.pets.find()
Resultaat:
{ "_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" }
We kunnen zien dat alle wijzigingen zijn aangebracht zoals gespecificeerd.
De ordered
Parameter
Bulkschrijfbewerkingen kunnen zowel besteld als ongeordend zijn. Standaard worden ze besteld.
U kunt de volgorde specificeren met behulp van de bestelde booleaanse parameter. Geef een waarde op van true
maakt er een geordende lijst van bewerkingen van, door deze in te stellen op false
maakt het een ongeordende lijst met bewerkingen.
Met een geordende lijst met bewerkingen voert MongoDB de bewerkingen serieel uit. Als er een fout optreedt tijdens de verwerking van een van de schrijfbewerkingen, keert MongoDB terug zonder de resterende schrijfbewerkingen in de lijst te verwerken.
Met een ongeordende lijst met bewerkingen kan MongoDB de bewerkingen parallel uitvoeren (hoewel dit niet gegarandeerd is). Als er een fout optreedt tijdens de verwerking van een van de schrijfbewerkingen, zal MongoDB doorgaan met het verwerken van de resterende schrijfbewerkingen in de lijst.
Meer informatie
De db.collection.bulkWrite()
methode accepteert ook een writeConcern
argument, dat het niveau van bevestiging beschrijft dat van MongoDB is gevraagd voor schrijfbewerkingen.
Zie de MongoDB-documentatie voor db.collection.bulkWrite()
voor meer informatie.