mongoose模型的save()会错过一些值吗?

时间:2014-05-17 21:44:08

标签: mongodb mongoose

我带着开发人员可能遇到的最糟糕的事情来到这里,我发现了一个我无法重现的错误。

我正在制作排名游戏。 我有一个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时会错过他的玩家阵列的一些更新。

你怎么看?你会在哪里看? 每次游戏结束时,我都会将点数存储到其他变量中,除了此模型外,它可以在任何地方使用... 我甚至有一个数组,它是比赛模型的再现,我用作一种缓存系统,一切都很好用,所以我几乎100%肯定这与mongoose / mongo有关。

0 个答案:

没有答案