2015-07-21 17 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()'的引用來更新它,因爲沒有人在線程中提到它。希望對遇到此問題的人也有所幫助。 –

相關問題