我带着开发人员可能遇到的最糟糕的事情来到这里,我发现了一个我无法重现的错误。
我正在制作排名游戏。
我有一个Tounament Model
,其中包含每个参加游戏的玩家。
每隔5分钟我就会保存一次锦标赛的模型。
TounamentModel: {
Players: [ { _user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, points: { type: Number, required: true, default: 0 } } ]
}
一切都运作良好,但在大约50名玩家之后,我开始观察一些不会增加某些玩家积分的更新(每次游戏结束时,我都会将玩家的积分增加到锦标赛模特)。
我首先想到"也许如果玩家在自动保存期间增加积分数量,它不起作用,也许我们必须等待直到保存的回调",但是我写了一个简短的循环,表明它不是真的:
var User = new Docs['User']();
for (var i=0; i<100; i++) {
User.points += 10;
if (i === 50)
User.save();
}
setTimeout(function() {
User.save();
console.log('Finally: '+User.points); // Prints 1000 as expected
}, 10000);
所以我想知道,也许如果我们有很多玩家进入一个模型,也许在调用Tournament.save()
mongoose时会错过他的玩家阵列的一些更新。