2015-09-05 61 views
0

我与猫鼬有一个奇怪的行为。当我的结果对象为console.log时,我看到属性在这里,但是当我尝试获得像console.log(obj.propt)那样的期望值时,它将返回undefined。不可能从猫鼬物体获得财产

ServerModel.findOne(function (err, server) { 
    if (err) { 
     return console.error(err); 
    } 

    console.log(server); 
    // output: 
    // {_id: 55ead0eb4105b7df958256af, 
    // name: 'st1', 
    // ip: '57.29.42.241', 
    // capacity: 0, 
    // totalUsed: 0, 
    // state: true } 

    console.log(server.ip); 
    // output: undefined 

    console.log(server.name); 
    // output: st1 

    // but that works if I use the toObject method 
    var srvr = server.toObject(); 

    var serverAddress = srvr.ip; 
    // serverAddress is 57.29.42.241 
}); 

奇怪的是,如果我使用.toObject方法,它就可以工作。我一定错过了什么。有没有人对此有过解释?

+0

哦,我”我太蠢了......至少我希望这可能对像我这样的其他心不在焉的人有帮助!谢谢。 – Buzut

回答

2

当MongoDB文档中有一个字段存在但没有在Mongoose模式中定义时,会发生这种情况。

所以一定要在你的ServerModel模式来定义它作为

ip: String 

或者,要访问它,即使它不是在你的架构中定义,使用get方法:

console.log(server.get('ip'));