i have this code :
const updateComment = async (req, res) => {
try {
const post = await Post.findById(req.body.postId);
const comment = post.comments.find(
(comment) => comment.id === req.body.commentId
);
res.status(200).json(comment);
} catch (err) {
console.log(err);
res.status(500).json(err);
}
};
since i can't use mongoose find or findById because it's not a collection, i used javascript find method to find a specific comment, but since i can't also use updateOne, how can i update the comment body?
i tried this :
comment.body = req.body.newCommentBody;
but it doesn't work, how to mutate the object in the database?
Depends if you're using unique commentId across all database (like ObjectId). Then you can use updateOne to search by comment id and use positional operator $ like this:
await Post.updateOne(
{"comments.id" : req.body.commentId},
{"comments.$.body": req.body.newCommentBody}
)
But this way you won't get comment to send in res. You can also find post, update in place and send back to db:
const post = await Post.findById(req.body.postId)
const comment = post.comments.find(
(comment) => comment.id === req.body.commentId
);
comment.body = req.body.newCommentBody
await post.save()
res.status(200).json(comment);
I'm not sure if .findById() returns array or single doc, if array you have to add [0] of course.