【问题标题】:push array in array field in mongodb [duplicate]在mongodb的数组字段中推送数组[重复]
【发布时间】:2018-11-21 11:31:10
【问题描述】:

我在一个名为 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 添加到数组中?我不希望它用学生 ID 替换数组,我想在我提出更多请求时继续添加更多。

谢谢!

【问题讨论】:

  • 把你的架构和内容放在req.body.students
  • 这没有任何意义。添加一个 ObjectID 很好,但是当我尝试添加另一个 ObjectID 时,它会在应该添加时用新的 ObjectID 替换第一个 ObjectID。

标签: node.js mongodb express mongoose


【解决方案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】:

    put 请求将更新您的数据库,来自 mongoose 的 findOneAndUpdate 方法也用于更新您当前的项目,如果您想创建一个新项目,您需要在 mongoose 中使用 post 请求和 save 方法。

    【讨论】:

    • 你能举个例子吗?
    【解决方案3】:

    你可以试试这个:

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

    【讨论】:

    • 不起作用,如果数组中有一个 id 就替换它而不是添加到它。
    • 请仔细阅读上面编辑的代码。 @omar
    • 抱歉,我好像没听懂?我看到的唯一区别是选项,但我不确定那是什么?如您所见,我当前的代码确实有 $push
    • 您可以尝试以下链接或使用 Emad Dehnavi 概念 blog.ocliw.com/2012/11/25/mongoose-add-to-an-existing-array
    猜你喜欢
    • 2017-09-17
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 2019-08-23
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多