Я теряю некоторые (но не все) изменения в моей модели Mongoose при заполнении после сохранения. Я соединяю случайный (здесь упрощенный просто первый) элемент из массива и назначаю его в другую переменную. И target (activeTile), и массив (unusedTiles) обновляются в базе данных, но в запросе заполнения я вижу обновления только целевому, а не массиву.Mongoose populate lost array Сохраненные изменения
// 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.