MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB bulkWrite()

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 comme true si l'opération s'est exécutée avec un souci d'écriture ou false 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.