2015-04-03 60 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 
}); 

然而,當我做了閱讀,我發現收集處於第一個操作完成的狀態,而不是第二個操作。有什麼我可以做多個更新原子?

回答

1

否。在MongoDB中,操作只是在單個文檔級別進行原子操作。影響多個文檔的多次更新或更新始終有可能在文檔更改之間產生,從而允許發生「中間狀態」讀取。一般來說,原子性要求是內置在文檔設計中的,只要這是可行的。除此之外,執行其原子性要求取決於應用程序。查看關於2-phase commits的文檔文章,瞭解使用應用程序邏輯實施原子性的示例。