2014-05-02 42 views
0

保存後填充時,我正在對Mongoose模型丟失一些(但不是全部)更改。我將一個隨機(在這裏簡化爲第一個)元素從數組中拼接出來並分配給另一個變量。目標(activeTile)和數組(unusedTiles)都在數據庫中更新,但在填充調用中,我只看到更新的目標而不是數組。貓鼬填充丟失數組已保存的更改

// Executing code 
console.log('==0> ' + gamestate.unusedTiles.length); 
console.log('==0> ' + gamestate.activeTile.tile); 
gamestate.nextTile(function(err, gamestate2) { 
    console.log('==2>' + gamestate2.unusedTiles.length); 
    console.log('==2>' + gamestate2.activeTile); 
    gamestate2.populate('activeTile unusedTiles', function(err, gamestate3) { 
     console.log('==3> ' + gamestate3.unusedTiles.length); 
     console.log('==3> ' + gamestate3.activeTile); 
    }); 
}); 

// And in the Mongoose model 
var gamestateSchema = mongoose.Schema({ 
    unusedTiles: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Tile' }], 
    activeTile: { type: mongoose.Schema.Types.ObjectId, ref: 'Tile' } 
}); 

gamestateSchema.methods.nextTile = function(callback) { 
    var gamestate = this; 
    gamestate.activeTile = gamestate.unusedTiles.splice(0, 1)[0];   
    gamestate.markModified('unusedTiles'); 
    gamestate.save(function(err, gamestate1) { 
     console.log('==1> ' + gamestate1.unusedTiles.length); 
     console.log('==1> ' + gamestate1.activeTile); 
     callback(err, gamestate1); 
    });   
} 

,並將所得控制檯輸出顯示如下:

==0> 65 
==0> 5356b8907b915c0000e068a2 
==1> 64 
==1> 5356b8907b915c0000e06887 
==2> 64 
==2> 5356b8907b915c0000e06887 
==3> 65 
==3> { 
     _id: 5356b8907b915c0000e06887, 
     ... // rest of tile object 
    } 

我希望在填入回調可以看出兩者的變化。所以unusedTiles數組的新長度應該是65而不是64.任何想法是怎麼回事?

我正在使用Mongoose 3.8.1。

回答

0

它看起來像我需要標記陣列再次填充前立即修改。我猜Mongoose會從數據庫中提取舊數組,否則填充數據?由於填充是在保存回調中完成的,所以沒有什麼意義。不知道,但它正在與這一變化。

gamestate2.markModified('unusedTiles');