Mongoose返回Mongo对象,但不能访问它的属性
在我简单的Node / Mongo / Mongoose设置中,我有一个函数调用服务器来查看当前使用的最高ID,并返回下一个ID。 这个函数作为一个callback函数来创build一个新的Game
。
奇怪: logger.log
出现在输出下面
result { _id: 555d83d5bb0d4e3c352d896f, gameId: 'NaN' }
但是当我改变logging器
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); } }); };
我build议你使用自动增量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... }) }
执行这个代码后,你应该像这样做:
{ _id: "555d83d5bb0d4e3c352d896f", gameNickname: "nickname", gameId: 1 }