2015-04-03 2 views
0

В MongoDB, я следующую команду, чтобы обновить кучу документоватомарно обновление нескольких документов

Я использую MongoDB-родной драйвер для 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 
}); 

Однако, когда я делаю read, я нахожу коллекцию в состоянии, когда завершена первая операция, но не вторая операция. Есть ли что-то, что я могу сделать, чтобы сделать несколько обновлений атомарными?

ответ

1

№ В MongoDB операции являются атомарными только на уровне одного документа. Множественные обновления или обновления, влияющие на несколько документов, всегда имеют потенциал для перехода между изменениями в документах, что позволяет читать «промежуточное состояние». Как правило, требования к атомности встроены в дизайн документа, насколько это возможно. Помимо этого, приложение должно применять требование атомарности. Просмотрите статью docs на странице 2-phase commits на примере использования логики приложения для обеспечения атомарности.

Смежные вопросы