在我的简单Node / Mongo / Mongoose设置中,我有一个函数调用服务器来查看我当前使用的最高ID,并返回下一个ID。此函数将创建新Game
的功能作为回调。
很奇怪:logger.log
显示在输出
result { _id: 555d83d5bb0d4e3c352d896f, gameId: 'NaN' }
但是当我将记录器更改为
时logger.log("result", result.gameId);
输出
result { _id: 555d83d5bb0d4e3c352d896f, gameId: 'NaN' }
没有意义。很明显,财产就在那里!
这是我的代码
var createGame = function(gameNickname, callback){
nextGameId(function(nextId){
var newgame = new models.Game({
"gameId": Number(nextId),
"gameNickname": gameNickname
});
newgame.save(function(result, game){
callback(result + nextId);
});
});
};
var nextGameId = function(callback){
var games = models.Game.find({}, {gameId: 1});
games.sort('-gameId').limit(1) //get the highest number roundId and add 1 to it
.exec(function (err, result) {
if (err) logger.log(err);
if (result === null){
callback(0);
}
else{
logger.log("result", result);
callback(result.gameId);
}
});
};
答案 0 :(得分:1)
我建议你使用autoincrement mongoose插件,像这样的东西
var mongoose = require('mongoose');
var autoIncrement = require('mongoose-auto-increment');
var connection = mongoose.createConnection("mongodb://localhost/db");
autoIncrement.initialize(connection);
var GameSchema = {
"gameId": {type: Number},
"gameNickname": {type: String}
}
GameSchema.plugin(autoIncrement.plugin, { model: 'Game', field: 'gameId' });
mongoose.model('Game', GameSchema);
之后,您可以使用autoinc保存游戏,例如:
var Game = mongoose.model('Game');
function createNewGame(nickname){
return new Game({gameNickname: nickname}).save(function(err, res){
console.log(res);
//some code...
})
}
执行此代码后,您应该像这样进行somnthing:
{
_id: "555d83d5bb0d4e3c352d896f",
gameNickname: "nickname",
gameId: 1
}