如何从java并发读取和更新mongodb的字段

如何从java并发读取和更新mongodb的字段,java,mongodb,Java,Mongodb,让我们举一个facebook帖子的例子,其中多个用户对一篇帖子表示喜欢。现在对于一些帖子,当前数据库存储了10个like,如果两个用户同时喜欢该帖子,那么两个用户都会将10读为当前like,并逐个更新11,但正确的值应该是12。如何使用mongodb和java实现这一点。检查操作符 以下是来自以下内容的示例代码: 对若我想递增,那个么这将起作用,但我的问题是,两个并发线程正在从数据库读取相同的值,然后更改该值(执行一些操作),然后将该值更新到数据库。例如A和B是两个用户。A同时读取10,B同时读

让我们举一个facebook帖子的例子,其中多个用户对一篇帖子表示喜欢。现在对于一些帖子,当前数据库存储了10个like,如果两个用户同时喜欢该帖子,那么两个用户都会将10读为当前like,并逐个更新11,但正确的值应该是12。如何使用mongodb和java实现这一点。

检查操作符

以下是来自以下内容的示例代码:


对若我想递增,那个么这将起作用,但我的问题是,两个并发线程正在从数据库读取相同的值,然后更改该值(执行一些操作),然后将该值更新到数据库。例如A和B是两个用户。A同时读取10,B同时读取10,A先对10进行一些计算并更新,然后B再读取更新后的值。然后,假设用户A正在读取和修改记录。您希望如何处理用户B?您可以锁定记录并抛出一个异常,说明它正在使用,或者等待事务/锁定结束。
// 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);