Dans MongoDB, le db.collection.bulkWrite()
La méthode effectue plusieurs opérations d'écriture avec des contrôles pour l'ordre d'exécution.
Les opérations d'écriture en masse affectent une seule collection. La collection
part est le nom de la collection avec laquelle effectuer les opérations.
Opérations d'écriture en masse
Le db.collection.bulkWrite()
peut être utilisée pour effectuer les opérations d'écriture suivantes :
insertOne
updateOne
updateMany
replaceOne
deleteOne
deleteMany
Chacune de ces méthodes peut être incluse dans un appel à db.collection.bulkWrite()
, et vous pouvez inclure différentes méthodes dans le même appel.
Exemple
Voici un exemple d'utilisation de db.collection.bulkWrite()
pour effectuer une opération d'écriture en masse sur une collection appelée pets
:
Supposons que nous insérions les documents suivants dans une collection appelée 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" }
])
Nous pouvons maintenant utiliser db.collection.bulkWrite()
pour effectuer une opération d'écriture en masse sur cette collection.
Exemple :
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 }
} }
])
Résultat :
{ "acknowledged" : true, "deletedCount" : 1, "insertedCount" : 1, "matchedCount" : 2, "upsertedCount" : 0, "insertedIds" : { "0" : 6 }, "upsertedIds" : { } }
Dans ce cas, nous avons inséré un document, mis à jour un autre document, supprimé un autre et remplacé un autre document.
Le db.collection.bulkWrite()
méthode renvoie ce qui suit :
- Un booléen
acknowledged
commetrue
si l'opération s'est exécutée avec un souci d'écriture oufalse
si la préoccupation d'écriture était désactivée. - Un décompte pour chaque opération d'écriture.
- Un tableau contenant un
_id
pour chaque document inséré ou mis à jour avec succès.
Afficher le résultat
Examinons à nouveau les documents de la collection.
db.pets.find()
Résultat :
{ "_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" }
Nous pouvons voir que toutes les modifications ont été apportées comme spécifié.
Le ordered
Paramètre
Les opérations d'écriture en masse peuvent être ordonnées ou non. Par défaut, ils sont classés.
Vous pouvez spécifier l'ordre à l'aide du paramètre booléen ordonné. Fournir une valeur de true
en fait une liste ordonnée d'opérations, en la définissant sur false
en fait une liste non ordonnée d'opérations.
Avec une liste ordonnée d'opérations, MongoDB exécute les opérations en série. Si une erreur se produit lors du traitement de l'une des opérations d'écriture, MongoDB reviendra sans traiter les opérations d'écriture restantes dans la liste.
Avec une liste d'opérations non ordonnée, MongoDB peut exécuter les opérations en parallèle (bien que cela ne soit pas garanti). Si une erreur se produit lors du traitement de l'une des opérations d'écriture, MongoDB continuera à traiter les opérations d'écriture restantes dans la liste.
Plus d'informations
Le db.collection.bulkWrite()
la méthode accepte également un writeConcern
argument, qui décrit le niveau d'accusé de réception demandé à MongoDB pour les opérations d'écriture.
Voir la documentation MongoDB pour db.collection.bulkWrite()
pour plus d'informations.