I MongoDB er db.collection.bulkWrite()
metoden udfører flere skriveoperationer med kontroller til rækkefølgen af udførelse.
Masseskrivehandlinger påvirker en enkelt samling. collection
del er navnet på den samling, som man udfører operationerne med.
Masseskriveoperationer
db.collection.bulkWrite()
metode kan bruges til at udføre følgende skriveoperationer:
insertOne
updateOne
updateMany
replaceOne
deleteOne
deleteMany
Enhver af disse metoder kan inkluderes i et kald til db.collection.bulkWrite()
, og du kan inkludere forskellige metoder i det samme opkald.
Eksempel
Her er et eksempel på brug af db.collection.bulkWrite()
at udføre en masseskriveoperation mod en samling kaldet pets
:
Antag, at vi indsætter følgende dokumenter i en samling kaldet 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" }
])
Vi kan nu bruge db.collection.bulkWrite()
at udføre en masseskriveoperation mod den samling.
Eksempel:
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 }
} }
])
Resultat:
{ "acknowledged" : true, "deletedCount" : 1, "insertedCount" : 1, "matchedCount" : 2, "upsertedCount" : 0, "insertedIds" : { "0" : 6 }, "upsertedIds" : { } }
I dette tilfælde indsatte vi et dokument, opdaterede et andet dokument, slettede et andet og erstattede et andet dokument.
db.collection.bulkWrite()
metode returnerer følgende:
- En boolesk
acknowledged
somtrue
hvis operationen kørte med skrivebekymring ellerfalse
hvis skriveproblemer var deaktiveret. - Et antal for hver skriveoperation.
- En matrix, der indeholder et
_id
for hvert vellykket indsat eller opsat dokumenter.
Se resultatet
Lad os nu tage et kig på dokumenterne i samlingen igen.
db.pets.find()
Resultat:
{ "_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" }
Vi kan se, at alle ændringerne blev foretaget som specificeret.
Den ordered
Parameter
Bulk skriveoperationer kan enten bestilles eller uordnes. Som standard er de bestilt.
Du kan angive rækkefølgen ved at bruge den ordnede booleske parameter. Angivelse af værdien true
gør det til en ordnet liste over operationer, og sætter den til false
gør det til en uordnet liste over operationer.
Med en ordnet liste over operationer udfører MongoDB operationerne serielt. Hvis der opstår en fejl under behandlingen af en af skriveoperationerne, vender MongoDB tilbage uden at behandle eventuelle resterende skriveoperationer på listen.
Med en uordnet liste over operationer kan MongoDB udføre operationerne parallelt (selvom dette ikke er garanteret). Hvis der opstår en fejl under behandlingen af en af skriveoperationerne, vil MongoDB fortsætte med at behandle resterende skriveoperationer på listen.
Flere oplysninger
db.collection.bulkWrite()
metode accepterer også en writeConcern
argument, som beskriver niveauet af bekræftelse, der anmodes om fra MongoDB for skriveoperationer.
Se MongoDB-dokumentationen for db.collection.bulkWrite()
for mere information.