MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB bulkWrite()

In MongoDB il db.collection.bulkWrite() il metodo esegue più operazioni di scrittura con controlli per l'ordine di esecuzione.

Le operazioni di scrittura in blocco influiscono su una singola raccolta. La collection part è il nome della raccolta con cui eseguire le operazioni contro.

Operazioni di scrittura collettiva

Il db.collection.bulkWrite() può essere utilizzato per eseguire le seguenti operazioni di scrittura:

  • insertOne
  • updateOne
  • updateMany
  • replaceOne
  • deleteOne
  • deleteMany

Ognuno di questi metodi può essere incluso in una chiamata a db.collection.bulkWrite() e puoi includere metodi diversi nella stessa chiamata.

Esempio

Ecco un esempio di utilizzo di db.collection.bulkWrite() per eseguire un'operazione di scrittura in blocco su una raccolta denominata pets :

Supponiamo di inserire i seguenti documenti in una raccolta chiamata 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" }
    ])

Ora possiamo usare db.collection.bulkWrite() per eseguire un'operazione di scrittura in blocco su quella raccolta.

Esempio:

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 }
    } }
])

Risultato:

{
	"acknowledged" : true,
	"deletedCount" : 1,
	"insertedCount" : 1,
	"matchedCount" : 2,
	"upsertedCount" : 0,
	"insertedIds" : {
		"0" : 6
	},
	"upsertedIds" : {
		
	}
}

In questo caso, abbiamo inserito un documento, aggiornato un altro documento, cancellato un altro e sostituito un altro documento.

Il db.collection.bulkWrite() il metodo restituisce quanto segue:

  • Un acknowledged booleano come true se l'operazione è stata eseguita con problemi di scrittura o false se il problema di scrittura è stato disabilitato.
  • Un conteggio per ogni operazione di scrittura.
  • Un array contenente un _id per ogni documento inserito o capovolto correttamente.

Visualizza il risultato

Ora diamo un'altra occhiata ai documenti della collezione.

db.pets.find()

Risultato:

{ "_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" }

Possiamo vedere che tutte le modifiche sono state apportate come specificato.

Il ordered Parametro

Le operazioni di scrittura in blocco possono essere ordinate o non ordinate. Per impostazione predefinita, vengono ordinati.

È possibile specificare l'ordine utilizzando il parametro booleano ordinato. Fornire un valore di true lo rende un elenco ordinato di operazioni, impostandolo su false lo rende un elenco non ordinato di operazioni.

Con un elenco ordinato di operazioni, MongoDB esegue le operazioni in serie. Se si verifica un errore durante l'elaborazione di una delle operazioni di scrittura, MongoDB ritornerà senza elaborare le restanti operazioni di scrittura nell'elenco.

Con un elenco di operazioni non ordinato, MongoDB può eseguire le operazioni in parallelo (sebbene ciò non sia garantito). Se si verifica un errore durante l'elaborazione di una delle operazioni di scrittura, MongoDB continuerà a elaborare le restanti operazioni di scrittura nell'elenco.

Maggiori informazioni

Il db.collection.bulkWrite() accetta anche un writeConcern argomento, che descrive il livello di riconoscimento richiesto da MongoDB per le operazioni di scrittura.

Consulta la documentazione di MongoDB per db.collection.bulkWrite() per ulteriori informazioni.