这是我的架构:
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)
之后,我认为问题正在发生。
任何方向都非常感激,我真的无法看到似乎是什么问题。