获取后,将新属性添加到Mongoose Document

时间:2015-07-21 08:56:44

标签: javascript mongodb mongoose

我在理解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没有其他属性。我错过了什么?

我想我是以某种方式创建局部变量而不是属性,但为什么不将它推送到结果数组?

1 个答案:

答案 0 :(得分:15)

从Mongodb查询返回的对象处于冻结(不可变)状态

您的代码似乎与MongoDB交互。返回的对象实际上是Mongodb模型实例,而不是普通的javascript对象。您无法修改从查询返回的对象。

将Mongodb文档转换为JSON对象

.toObject()可以解决问题。它将冻结的MongoDB文档转换为JSON对象。