目前,我正在尝试从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
即使'胜利者'财产显然存在。 有什么想法吗?
更新:在上面的代码及其结果中添加了更多日志记录
答案 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
});
非常感谢您的帮助!