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 cometrue
se l'operazione è stata eseguita con problemi di scrittura ofalse
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.