2015-07-21 2 views
1

У меня возникла проблема с пониманием манипуляций переменных в JavaScript. следующий код:Добавить новую собственность в Mongoose Document after fetch

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.UserPersonalScore» с соответствующим значением. При нажатии на результат con не имеет дополнительных свойств. Что мне не хватает?

Я предполагаю, что каким-то образом создаю локальные переменные вместо свойств, но почему их не толкают в массив результатов?

+0

Вам необходимо предоставить тестовый пример, который фактически демонстрирует проблему - http://sscce.org/ - вы манипулируете множеством переменных (это, вероятно, может быть упрощено), но не показывает нам, как они определены, и вы утверждаете, что значение 'con' в' result' не показывает нам, как вы это определяете. – Quentin

+0

Пожалуйста, напишите полную json или структуру объекта con –

+3

Здесь, похоже, нет JSON. http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/ – Quentin

ответ

6

Объекта вернулся из MongoDB запроса в замороженном (неизменном) состоянии

Вашего кода, кажется, взаимодействует с 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() ', так как никто еще не упоминал об этом в потоке. Надеюсь, это полезно людям, которые тоже натолкнулись на это. –

Смежные вопросы