2015-10-25 2 views
0

Я видел много примеров, как обновить массив, как этот Mongoose find/update subdocument и это один Partial update of a subdocument with nodejs/mongooseКак сохранить массив вспомогательного документа в мангусте?

, но моя цель состоит в том, чтобы обновить конкретное поле, например, в форме, в котором пользователь вводит данные.

Я использую ejs для шаблонов.

Вот код

Для ясности здесь схемы пользователя

var UserSchema = mongoose.Schema({ 
    resume: { 
    education: [{ type: String}], 
    } 

}); 

код маршрутизации

router.post('/update-resume', function(req, res) { 
    User.findById(req.user._id, function(err, foundUser) { 

     // Take a look over here, how do I update an item in this array? 
     if (req.body.education) foundUser.resume.education.push(req.body.education); 

     foundUser.save(function(err) { 
      if (err) return next(err); 
      req.flash('message', 'Successfully update a resume'); 
      return res.redirect('/update-resume') 
     }); 
    }); 

}); 

Если вы посмотрите на код выше, моя цель состоит в том, чтобы запросить пользовательские данные, которые возобновляются, и обновляют текущее значение.

Код для переднего конца

<form role="form" method="post"> 
    <div class="form-group"> 
    <label for="education">Education:</label> 
    <% for(var i = 0; i < user.resume.education.length; i++) { %> 
    <input type="text" class="form-control" name="education" id="education" value="<%= user.resume.education[i] %>"> 
    <% } %> 
    </div> 
    <button type="submit" class="btn btn-primary">Submit</button> 
</form> 

код Frontend делает работу, перебирать в каждом user.resume.education массиве, и показать все значения в массиве. Но как мне его обновить?

ответ

0

Поскольку вы используете .push() в массиве образования, mongoose не знает, что это поле изменилось, вам нужно указать его с помощью функции markModified(), поэтому mongoose будет знать, что это поле изменилось, поэтому после нажатия с использованием массива образования:

foundUser.markModified('resume.education');

, а затем использовать функцию save()

UPDATE:

router.post('/update-resume', function(req, res) { 
    User.findById(req.user._id, function(err, foundUser) { 

     // Take a look over here, how do I update an item in this array? 
     if (req.body.education) foundUser.resume.education.push(req.body.education); 

     foundUser.markModified('resume.education'); // <-- ADDITION 

     foundUser.save(function(err) { 
      if (err) return next(err); 
      req.flash('message', 'Successfully update a resume'); 
      return res.redirect('/update-resume') 
     }); 
    }); 

}); 
+0

https://gist.github.com/anonymous/6e764675a8c48e20bbd0 –

+0

Проверьте суть, так или иначе, я не знаю, как это реализовать. –

+0

и во-вторых, как орган-парсер будет знать, какой req.body принадлежит к тому индексу? –

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