2014-09-01 45 views
1

讓我們舉一個facebook帖子的例子,其中多個用戶給予一個帖子喜歡。現在對於一些當前的數據庫存儲10喜歡,如果兩個用戶同時喜歡這篇文章,然後都將讀取10當前像和逐一更新11,但正確的值應該是12.如何使用mongodb和Java來實現此目的。如何從java中同時讀取和更新一個mongodb字段

回答

2

檢查運營商$inc

這裏是從這個link一個示例代碼:

// connect to MongoDB server. 
Mongo mongo = new Mongo("localhost", 27017); 
DB database = mongo.getDB("mydb"); 
DBCollection collection = database.getCollection("testCollection"); 

// create a simple db object where counter value is 0 
DBObject temp = new BasicDBObject("name", "someName").append("counter", 0); 

// insert it into the collection 
collection.insert(temp); 

// create an increment query 
DBObject modifier = new BasicDBObject("counter", 1); 
DBObject incQuery = new BasicDBObject("$inc", modifier); 

// create a search query 
DBObject searchQuery = new BasicDBObject("name", "someName"); 

// increment a counter value atomically 
WriteResult upRes = collection.update(searchQuery, incQuery); 
+0

是。這將工作,如果我想增量,但我的問題是兩個併發線程正在從數據庫讀取相同的值,然後更改該值(做一些操作),然後將該值更新到數據庫。例如.. A和B是兩個用戶。 A讀取10和B同時讀取10並且A在10上執行一些計算並且先更新然後B然後B應該讀取更新的值。 – vareen 2014-09-02 06:08:50

+0

然後,假設用戶A正在讀取和修改記錄。你期望如何處理用戶B?您可以鎖定記錄並拋出異常,說明正在使用該記錄,或者等待事務/鎖定結束。 – 2014-09-09 03:10:06

相關問題