在mongodb中的数组字段中推送数组

时间:2018-06-12 06:49:31

标签: node.js mongodb express mongoose

我在一个名为Course的模式中有一个名为students的数组。我创建了一条路线,允许我使用学生ObjectID将学生添加到此阵列中,如下所示:

 router.put('/addStudent/:courseID', function (req, res) {
        Course.findOneAndUpdate({courseID: req.params.courseID}, {$push: {students: req.body.students}})
        .populate('students')
        .exec(function (err, course) {

            if (err) return res.status(500).send("There was a problem adding this information to the database");
            res.status(201).send(course);
        })
    });

当我尝试使用以下JSON主体向我的端点发出PUT请求时:

{
    "students":["5b1f06cafa355c2d187c344f"]
}

根本没有任何事情发生,它只是将我的课程发回给学生证而不添加。如何制作它以便我可以为阵列添加更多学生ID?我不希望它用学生ID替换数组,我想在我提出更多请求时继续添加更多数据。

谢谢!

3 个答案:

答案 0 :(得分:2)

put请求将更新你的db和mongoose的findOneAndUpdate方法也用于更新当前项目,你需要在mongoose中使用post request和save方法,而不是你想要创建一个新项目。

答案 1 :(得分:1)

您需要将$each$push

一起使用
Course.findOneAndUpdate(
  { courseID: req.params.courseID },
  { $push: { students: { $each: req.body.students } } }
)
Course.findOneAndUpdate(
  { courseID: req.params.courseID },
  { $addToSet: { students: { $each: req.body.students } } }
)

答案 2 :(得分:0)

你可以试试这个:

Course.findOneAndUpdate(
{ courseID: req.params.courseID }, 
{ $push: {
    students: req.body.students
}}, options, function(err, values){

});