我在编码方面是个菜鸟,我在如何正确使用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);
}
});
});
}
答案 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) {
..
}
);
}