2015-07-21 15 views
1

我在理解JavaScript中的变量操作时遇到了问题。 以下代码:获取后向Mongoose Document添加一个新属性

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没有附加属性。我错过了什么?

我想我是以某种方式创建局部变量而不是属性,但为什么不被推送到结果数组?从MongoDB的查询返回

+0

您需要提供一个实际演示问题的测试用例 - http://sscce.org/ - 您正在操纵很多变量(这可能会被简化),但不会向我们展示它们是如何定义的,并且你在声明'结果'中'con'的值是什么没有告诉我们你是如何确定的。 – Quentin

+0

请编写完成json或con的对象结构 –

+3

这里也没有任何JSON。 http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/ – Quentin

回答

6

对象是冻结(immutable)的状态

您的代码似乎与MongoDB的互动。返回的对象实际上是一个Mongodb模型实例,而不是一个普通的JavaScript对象。您不能修改查询返回的对象。

要MongoDB的文档转换为JSON对象

.toObject()的伎俩。它将冻结的MongoDB文档转换为JSON对象。

+1

解决方法:[如何获得可以操纵的普通JS对象](http://stackoverflow.com/questions/14504385/why-cant-you-modify-the-data-returned-by-a-mongoose-query -ex-findbyid)。 –

+1

我也用'.toObject()'的引用来更新它,因为没有人在线程中提到它。希望对遇到此问题的人也有所帮助。 –

相关问题