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:
insertOneupdateOneupdateManyreplaceOnedeleteOnedeleteMany
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
acknowledgedbooleano cometruese l'operazione è stata eseguita con problemi di scrittura ofalsese il problema di scrittura è stato disabilitato. - Un conteggio per ogni operazione di scrittura.
- Un array contenente un
_idper 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.