我认为这个代码涉及NodeJs和MongoDb可能会失败,如何解决它?

这看起来像一个通用的数据库问题,但我会问我在当前的NodeJs + MongoDb的上下文。

假设我们有一个ID为“xyz”的通用计数器。 这是一段代码来获取最新的计数,并增加1:

collection.find({id: "xyz"}, function(err, currentCount) { collection.update({id: "xyz"}, {$inc: {count: 1}}, function(err, data) { cb(currentCount); } } } 

问题是,如果两个客户端试图同时调用这个代码,那么这两个客户端可能会得到相同的计数,然后集合更新计数两次 – 不可取! 如何解决这个问题?

$ inc是primefaces,没有风险。 这是从外面的发现不起作用。

 collection.update({id: "xyz"}, {$inc: {count: 1}}, function(err, data) { cb(data); } } 

可能是你想要的。

你可以使用findAndModify,它修改对象并返回更新的版本。 这保证每个调用者都会得到递增的值。

 collection.findAndModify( {id: 'xyz' }, ['_id'], {$inc: {count: 1}}, function (err, data) { cb(data); });