无法在Javascript中检索对象属性

时间:2015-04-15 21:15:28

标签: javascript mongoose

目前,我正在尝试从mongoose返回的javascript对象中检索特定属性。 我可以在打印整个对象时看到该属性,但在尝试使用它时,我得到一个未定义的。这是代码:

Match.findOne({id: match.id}, function (err, match) {
    console.log(match)
    console.log(typeof match)
    console.log(match.id)
    console.log(match.winner)
})

输出是:

{ _id: 552c7f2925efcbc88ccc55bf,
    id: 499142595,
    region: 'br',
    winner: 200,
    championsLose: [ 25, 96, 81, 113, 63 ],
    championsWin: [ 37, 238, 201, 268, 81 ] 
}
object
499142595
undefined

即使'胜利者'财产显然存在。 有什么想法吗?

更新:在上面的代码及其结果中添加了更多日志记录

3 个答案:

答案 0 :(得分:2)

奇怪的是,与“_id”键相关的值没有引号:

{ _id: 552c7f2925efcbc88ccc55bf, // should be --> "552c7f2925efcbc88ccc55bf" 
id: 499142595,
region: 'br',
winner: 200,
championsLose: [ 25, 96, 81, 113, 63 ],
championsWin: [ 37, 238, 201, 268, 81 ] 
}

这似乎表明它实际上不是一个对象。当然,这解释了为什么match.winner未定义。我会console.log(typeof match)看看它说的是什么。

答案 1 :(得分:0)

控制台更新(“实时更新”)如果对象/属性在console.log()之后发生更改,则最后一次引用。我最近使用chrome

来解决这个问题

可能是这种情况

chrome中查看此示例,不知道此问题在节点控制台或您正在使用的工具中的行为

obj = {a:"b",b:"c"};
console.log(obj);  // logs Object { b: "c" } not {a:"b",b:"c"}
delete obj.a;
console.log(obj);// logs Object { b: "c" }

您可能稍后在代码中删除了match.winner属性。这似乎只是个案

答案 2 :(得分:0)

最后问题不是在那段代码中,而是在模型定义中。变量名称未正确更新,因此旧名称仍在那里使用:

var mongoose = require('mongoose');

module.exports = mongoose.model('Match',{
    id: Number,
    region: String,
    championsWin: Array,
    championsLose: Array,
    winnerTeamId: Number
});

正确的模型应该是:

module.exports = mongoose.model('Match',{
    id: Number,
    region: String,
    championsWin: Array,
    championsLose: Array,
    winner: Number
});

非常感谢您的帮助!