#node.js #express #mongoose
#node.js #экспресс #мангуст
Вопрос:
Я не могу обновить поле статуса в документе. может кто-нибудь, пожалуйста, помочь? Спасибо! проблема заключается в изменении значения по умолчанию.
я хочу, чтобы администратор мог обновлять статус заявителя с ожидающего на любой вариант, выбранный из параметров выбора в форме ejs
это в контроллере:
exports.postName = async(req, res, next)=>{
const name = req.body.name;
console.log(name)
const pupil = new Pupil({
name: name,
});
await pupil.save().then(updates=>{
console.log(updates)
res.redirect('/name');
}).catch(error=>{
console.log(error);
});
}
это также от контроллера:
exports.postUpdatePupil = async (req, res, next)=>{
const status = req.body.status
Pupil.updateOne(
{_id: req.params.id},
{
$set: {'Pupil.$.status': status}
},(err, result)=>{
if(err){
return next(err)
}console.log(result);
}
)
это модель:
const UpdateSchema = new mongoose.Schema({
name: String,
status: {type: String, default: "Pending"}
});
const update = mongoose.model('update', UpdateSchema);
module.exports = update;
Ответ №1:
Имя модели должно быть «Ученик», а не «Обновление».
const PupilSchema = new mongoose.Schema({
name: String,
status: {type: String, default: "Pending"}
});
module.exports = mongoose.model('Pupil', PupilSchema);
И вы обновляете, как:
Pupil.updateOne(
{ _id: req.params.id },
status // same as { status: status }
(err, result) => {
if (err) return next(err);
console.log(result);
},
);
Комментарии:
1. Спасибо, хорошо! Я попробую, но почему я должен его менять, когда у меня есть вся модель в переменной с именем ‘update’?
2. Вы делаете
new Pupil()
, но вы не объявляете модель с именем Ученик , а обновляете . Если вы хотите заставить его работать с вашей моделью «обновление», вам нужно будет сделатьnew update()
,update.updateOne()
… Это не очень хорошая практика для чистого кода!3. Спасибо 👍. Это очень полезно.