如何 post 请求 mern 栈中数组的特定字段

How to post request for a particular field of array in mern stack

代码没有在answers数组中添加answer......请说明如何编写正确的实现方式? 'id' 是问题,用于参数。

架构:

const QuestionSchema = new mongoose.Schema({
    qtitle:{
        type:String,
        required:true
    },
    descofq:{
        type:String,
        required:true
    },
    pic:{
        type:String,
        default:"no photo"
    },
    answers:[
        {
            answer:{
                type:String,
                required:false
            },
            picofa:{
                type:String,
                default:"no photo"
            },
            postedBy:{
                type:mongoose.Schema.Types.ObjectId,
                ref:"USER"
            }
        }
    ]
    }
})

POST 请求:

router.post('/answer/:id',authenticate,(req,res)=>{
    Question.findById(req.params.id).then(question=>{
        question.answers.answer = req.body.answer;
        question.save().then(result=>{
            res.json(result)
        }).catch(err=>{
            res.status(400).send(err);
        })
    }).catch(err=>{
        res.status(200).send(err);
    })
})

我也试过了question.answers.answer.push(answer); 括号中的答案将从 req.body 获取,但这也没有用。

你的答案是一个数组。您不能将值设置为对象。 如果要将对象添加到数组。让我们使用推送功能。

例如: question.answers.push({ 回答: req.body.answer, postedBy: “userId” }); question.save()

答案字段是一个数组,您应该指定哪个答案 内部答案数组

router.post('/answer/:id',authenticate,(req,res)=>{
    Question.findById(req.params.id).then(question=>{
        question.answers.push(req.body.answers);
        question.save().then(result=>{
            res.json(result)
        }).catch(err=>{
            res.status(400).send(err);
        })
    }).catch(err=>{
        res.status(200).send(err);
    })
})

Example: req.body.answers = { answer: "bla bla..", picofa: "bla bla", postedBy: userId }

另一种解法:

router.post('/answer/:id',authenticate,(req,res)=>{
    Question.findById(req.params.id).then(question=>{
        question.answers[0].answer = req.body.answer;
        question.save().then(result=>{
            res.json(result)
        }).catch(err=>{
            res.status(400).send(err);
        })
    }).catch(err=>{
        res.status(200).send(err);
    })
})