Обновление мангуста

#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. Спасибо 👍. Это очень полезно.