2015-04-03 5 views
0

Dans MongoDB, j'ai la commande suivante pour mettre à jour un tas de documentsatomiquement mise à jour plusieurs documents

J'utilise pilote natif MongoDB pour Node.js:

champion_statistics.bulkWrite([ 
    {updateOne: {filter: {id: 1}, update: {$inc: {sum: 2}}, upsert: false}}, 
    {updateOne: {filter: {id: 2}, update: {$inc: {sum: 5}}, upsert: false}} 
], { 
    ordered: false 
}, function(err, res){ 
    //done 
}); 

Cependant, quand je fais un lire, je trouve la collection dans un état où la première opération terminée mais pas la deuxième opération. Y at-il quelque chose que je peux faire pour rendre plusieurs mises à jour atomiques?

Répondre

1

Non. Dans MongoDB, les opérations sont atomiques uniquement au niveau d'un seul document. Les mises à jour ou les mises à jour multiples affectant plusieurs documents ont toujours le potentiel de céder entre les changements de documents, ce qui permet des lectures "d'état intermédiaire". Généralement, les exigences d'atomicité sont intégrées à la conception du document, dans la mesure du possible. Au-delà de cela, il appartient à l'application de faire respecter son exigence d'atomicité. Consultez l'article docs sur 2-phase commits pour un exemple d'utilisation de la logique d'application pour appliquer l'atomicité.