我在理解JavaScript中的变量操作时遇到了问题。 以下代码:
UserScore.find(filter, function (err, userScores) {
var contests = [];
userScores.forEach(function(userScore)
{
contests.push(userScore.ContestId);
});
Contest.find({ '_id': { $in : contests } }, function(err, contestItems)
{
var result = [];
contestItems.forEach(function(con)
{
userScores.forEach(function(element) {
if(element.ContestId == con._id)
{
con.UserTeamName = element.TeamName;
con.UserPersonalScore = element.Score;
console.log(con);
console.log(con.UserPersonalScore);
result.push(con);
return;
}
});
});
res.status(200).json(result);
});
});
在没有添加两个属性的情况下打印“con”,并使用适当的值打印“con.UserPersonalScore”。当推送到结果时,con没有其他属性。我错过了什么?
我想我是以某种方式创建局部变量而不是属性,但为什么不将它推送到结果数组?
答案 0 :(得分:15)
从Mongodb查询返回的对象处于冻结(不可变)状态
您的代码似乎与MongoDB交互。返回的对象实际上是Mongodb模型实例,而不是普通的javascript对象。您无法修改从查询返回的对象。
将Mongodb文档转换为JSON对象
.toObject()
可以解决问题。它将冻结的MongoDB文档转换为JSON对象。