Я новичок в кодировании, и у меня возникла проблема с тем, как правильно использовать MongoDB.У меня есть класс родительского объекта, содержащий массив объектов - комментариев.Я пытаюсь обновить содержание 1 выбранного комментария.
Первоначально я обновил состояние всей "классной комнаты" в реакции и передал все данные и $ set {req.body} в findByIdAndUpdate.
Я хочу добиться того же результата, еслиЯ только передаю свой запрос axio classId, commentId и данные комментариев, а не весь класс / все комментарии
Я пытался отфильтровать выбранный комментарий из массива комментариев и конкатить обновленный комментарий, но это не сработало.Понятно, что я имею представление о том, что происходит, и документы не облегчают мне понимание.
моя схема класса:
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);
}
});
});
}
моя текущая неудачная попытка:
function update(req, res){
console.log('update => req.body: ', req.body);
console.log('req.params', req.params)
Comment.findById(req.params.comment_id, function(err, comment) {
if(err) res.send(err)
comment.content = req.body.content;
comment.save();
console.log('comment: ', comment);
Classroom.findById(req.params.classroom_id, function(err, classroom) {
console.log('CLASSROOM findByIdAndUpdate classroom: ', classroom)
// console.log('reg.body: ', req.body)
if (err) {
console.warn('Error updating comment', err);
res.send(err);
} else {
// commentToUpdate = req.body.commentData;
old_comments = classroom.comments;
console.log('comments: ', old_comments);
Classroom.findByIdAndUpdate(req.params.classroom_id,
{$set:
{ comments: old_comments.filter(comt._id !== comment._id).concat(comment)}
}, function(err, updatedClassroom) {
if (err) {
console.warn(err);
} else {
res.json(updatedClassroom);
}
});
}
});
});
}