我正在为实时浏览器游戏制作原型,并将带有自动增量ID的游戏详细信息插入数据库(使用mongoose
):
我设置了一个setGameID函数使其唯一,没有问题。
exports.setGameId = function(callback) {
gameidcounter.findOneAndUpdate({},{$inc : {'counter' : 1}}).exec(function (e,c) {
if(e) return;
//console.log(c)
callback(c.counter)
})
};
但是当我使用100 MS setInterval运行+10个标签时,有些行正在替换它们的位置:
DocID | gameID | gameData
790 | 790 | ....
791 | 791 | ....
792 | 793 | <---
793 | 792 | <---
如果行不正确,请使用此方法检查:
game.find().exec(function (err, _game) {
for (var i = 0; i < _game.length; i++) {
if(_game[i].gameID+1 != _game[++i].gameID ) {
console.log("replaced lines :", _game[i].bet_id, _game[++i]._id);
}
};
})
如何在不使用任何库的情况下解决此问题?
我用这种方法解决了这个问题:
game.findOne().sort({'_id' : -1}).limit(1).exec(function (err, last_game) {
if(last_game.gameID + 1 == _game.gameID){
//ok
}
else {
//error in rows
console.log("skipped")
gameidcounter.findOneAndUpdate({},{$inc : {'counter' : -1}}).exec(function (e,c) {})
}
})