【发布时间】:2016-04-14 21:18:47
【问题描述】:
我有以下代码:
function() {
Server.findOne({
_id: id
})
.populate('_players')
.exec(function(err, server) {
if (err) {
return console.log(err);
} else if (server) {
console.log('Server: ' + server.name);
for (elem in allPlayers) {
if (allPlayers.hasOwnProperty(elem)) {
//console.log('DEBUG: allPlayers has Property');
var player = allPlayers[elem];
var obj = server._players.find(function(obj) {
return obj.steam_id === player.steamID;
});
if (obj) {
console.log('|| ' + obj.name + ' was online at: ' + obj.last_online);
console.log('--> update to: ' + new Date());
obj.last_online = new Date();
obj.save(function(err, obj) {
if (err) return console.log(err);
console.log('DEBUG: existing Player safed: ', obj.name);
})
} else {
var newPlayer = new Player();
newPlayer._id = new mongoose.Types.ObjectId();
newPlayer.name = player.name;
newPlayer.steam_id = player.steamID;
newPlayer.last_online = new Date();
newPlayer.save(function(err, newPlayer) {
if (err) return console.log(err);
console.log('DEBUG: newPlayer safed: ', newPlayer.name);
});
server._players.push(newPlayer);
}
} else {
console.log('There is no Property (allPlayers)');
}
}
server.save(function(err, server) {
if (err) return console.log(err);
console.log('DEBUG: server safed: ', server.name);
})
} else {
console.log('There is no such server (updatePlayers)');
}
})
}
因此,这样做的目的是获取属于特定服务器的所有现有玩家。如果 allPlayers 数组中有新玩家,则应将其保存在数据库中。如果玩家已经存在,则 last_online 时间刚刚更新。除了一个问题之外,它基本上可以正常工作。如果我尝试从数据库中更新现有玩家,则在保存现有玩家之前,服务器是安全的。所以他们实际上并没有因此而更新,我绝对不明白为什么会这样。顺便说一句,新玩家得到了正确的保护......
希望得到任何建议!
// 调试输出是这样的:
{
> DEBUG: server safed: TestServer
DEBUG: existing Player safed: How's it going
DEBUG: existing Player safed: skullsoul2
DEBUG: existing Player safed: Terra
DEBUG: existing Player safed: Rundas
DEBUG: existing Player safed: [OG]GreyForce
DEBUG: existing Player safed: Thyrenos
}
//但应该是这样的
{
DEBUG: existing Player safed: How's it going
DEBUG: existing Player safed: skullsoul2
DEBUG: existing Player safed: Terra
DEBUG: existing Player safed: Rundas
DEBUG: existing Player safed: [OG]GreyForce
DEBUG: existing Player safed: Thyrenos
> DEBUG: server safed: TestServer
}
【问题讨论】:
标签: node.js mongodb mongoose mongodb-query