2015-06-01 82 views
0

我目前正在使用MEAN堆棧,我試圖更新嵌入式文檔。一切似乎都在執行工作,但刷新後的數據不會保留:Mongoose嵌入式文檔更新不會持續

// Soon to be update answer 
exports.updateAnswer = function(req, res) { 
    var ansId = req.params.aid; 
    var result; 
    Poll.findById(req.params.id,function(err, poll){ 
    if(err) { return handleError(res, err); } 
    poll.answers.forEach(function(answer){ 
     if(ansId == answer._id) result = answer; 
    }) 
    var updated = _.merge(result, req.body); 
    poll.markModified('answers'); 
    updated.save(function (err) { 
     if (err) { return handleError(res, err); } 
     return res.json(200, poll); 
    }); 
    }); 
}; 

我的架構:

'use strict'; 

var mongoose = require('mongoose'), 
    Schema = mongoose.Schema, 
    ObjectId = Schema.ObjectId; 

var AnswerSchema = new Schema({ 
    answer: String, 
    votes:{type: Number, default: 0} 
}); 

module.exports = mongoose.model('Answer', AnswerSchema); 

var PollSchema = new Schema({ 
    author: String, 
    question: String, 
    answers: [AnswerSchema] 
}); 

module.exports = mongoose.model('Poll', PollSchema); 

PUT請求:由laggingreflex提供

$scope.vote = function(answer) { 
     $scope.pollObj.answers.forEach(function(el,indx){ 
     if(el['_id'] == $scope.radioVal.selected) { 
      el['votes']++; 
      $http.put('/api/polls/'+$scope.pollId+'/answers/'+el['_id'],el). 
      success(function(data){ 
      console.log(data); 
      }) 
     } 
     }) 
+0

嘗試'poll.save()' ? – laggingreflex

+0

是的!這工作!謝謝 – pdotsani

回答

0

答:

exports.updateAnswer = function(req, res) { 
     var ansId = req.params.aid; 
     var result; 
     Poll.findById(req.params.id,function(err, poll){ 
     if(err) { return handleError(res, err); } 
     poll.answers.forEach(function(answer){ 
      if(ansId == answer._id) result = answer; 
     }) 
     var updated = _.merge(result, req.body); 
     poll.markModified('answers'); 
     poll.save(function (err) { // <== change here 
      if (err) { return handleError(res, err); } 
      return res.json(200, poll); 
     }); 
     }); 
    };