如何在mongodb上使用findByIdAndUpdate?

时间:2019-04-15 05:14:54

标签: node.js mongodb express

我在编码方面是个菜鸟,我在如何正确使用MongoDB方面遇到问题。我有一个包含一系列对象的父对象教室-注释。我正在尝试更新1条选定评论的内容。

最初,我在react中更新了整个“教室”的状态,并在findByIdAndUpdate中传递了所有数据和$ set {req.body}。

如果我只传递给axios请求classId,commentId和注释数据,而不是整个教室/所有注释,我希望获得相同的结果

我试图从注释数组中过滤选定的注释,并用concat更新注释,但这没有用。显然,我知道发生了什么,文档也没有使我更容易理解。

我的教室模式:

person

评论模式:

var ClassroomSchema = new Schema({
  title: String,
  teacher: String,
  info: String,
  image_url: String,
  comments: [Comment.schema]
});

原始解决方案:

var CommentSchema = new Schema()

CommentSchema.add({
    content: String,
    comments: [CommentSchema],
    created_at: {
        type: Date,
        default: Date.now
    }
});

我当前的失败尝试:

function update(req, res){
    Comment.findById(req.params.comment_id, function(err, comment) {
        if(err) res.send(err)
        comment.content = req.body.content;
        comment.save();
        console.log(req.body.comments)
        Classroom.findByIdAndUpdate(req.params.classroom_id,
            {$set: req.body}, function(err, classroom){
            if (err) {
                console.log(err);
                res.send(err);
            } else {
                commentToUpdate = req.body.commentData;
                res.json(classroom);
            }
        });
    });
}

1 个答案:

答案 0 :(得分:0)

还没有测试过,但是尝试一下。

function update(req, res) {
  Classroom.update(
    { _id: req.params.classroom_id, "comments._id": req.params.comment_id },
    { $set: { "comments.$.content": req.body.content } },
    function(err) {
     ..
    }
  );
}