Только первый элемент массива обновляется во вложенном документе Mongoose
Это моя схема:
let userSchema = new mongoose.Schema({
id: String,
displayName: String,
displayImage: String,
posts: [
{
url: String,
description: String,
likes: [String],
comments: [
{ content: String, date: String, author: { id: String, displayName: String, displayImage: String } }
]
}
]
});
Я пытаюсь отредактировать элементы в массиве комментариев и уже знаю, что должен был создать две отдельные схемы из-за ограниченной функциональности MongoDB, когда дело доходит до манипулирования двойными вложенными документами.
Но в любом случае, мне кажется, это работает, помните, что я пытаюсь редактировать содержимое определенного комментария в массиве комментариев.
controller.editComment = (req, res, next) => {
User.findOne(
{ id: req.query.userid, 'posts._id': req.params.postid },
{ 'posts.$.comments._id': req.body.commentID }
)
.exec()
.then((doc) => {
let thisComment = doc.posts[0].comments.filter((comment) => { return comment._id == req.body.commentID; });
thisComment[0].content = req.body.edited;
doc.save((err) => { if (err) throw err; });
res.send('edited');
})
.catch(next);
};
Это работает, однако ВСЕГДА обновляет только комментарии самого первого сообщения, независимо от того, какой комментарий я редактирую. Но, пожалуйста, имейте в виду, что thisComment[0].content
, если console.logged, всегда будет показывать правильное содержание правильного комментария под правильным сообщением. Однако после doc.save(err)
где я предполагаю, что проблема происходит.
Любое направление приветствуется, я действительно не вижу, в чем проблема.