sql >> Database >  >> NoSQL >> MongoDB

MongoDB bulkWrite()

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 als true als de bewerking werd uitgevoerd met schrijfproblemen of false 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.


  1. Wat is een goede databasekeuze voor een kleine .NET-toepassing?

  2. mongodb 3.4.3 Toestemming geweigerd wiredtiger_kv_engine.cpp 267 fout met ubuntu 16

  3. Gebruik MongoEngine en PyMongo samen

  4. Hoe mongod.conf bind_ip in te stellen met meerdere ip-adressen