如何使用 mongoose 和 nodejs 删除嵌套在 Post 模式中的评论?
Posted
技术标签:
【中文标题】如何使用 mongoose 和 nodejs 删除嵌套在 Post 模式中的评论?【英文标题】:How to delete comment that is nested in Post schema with mongoose and nodejs? 【发布时间】:2020-11-16 05:57:37 【问题描述】:我希望能够删除 Post 模型中的评论。
这是我的 Post 模型架构:
const PostSchema = new Schema(
userID:
type: Schema.Types.ObjectId,
ref: 'user'
,
content:
type: String,
required: true
,
registration_date:
type: Date,
default: Date.now
,
likes: [
type: Schema.Types.ObjectId,
ref: "user"
],
comments: [
text: String,
userID:
type: Schema.Types.ObjectId,
ref: 'user'
]
)
我有这条路线:
router.delete('/comment/:id/:comment_id', auth, async (req, res) =>
const postId = req.params.id
const commentId = req.params.comment_id
帖子中的cmets如下所示:
comments: [
_id: 5f1df4cf5fd7d83ec0a8afd8,
text: 'comment 1',
userID: 5efb2296ca33ba3d981398ff
,
_id: 5f1df4d35fd7d83ec0a8afd9,
text: 'commnet 2',
userID: 5efb2296ca33ba3d981398ff
]
我想删除评论,不知道怎么做。有人知道怎么做吗?
【问题讨论】:
【参考方案1】:首先我们找到 findByIdAndUpdate
的帖子,然后我们从 cmets 数组中删除使用 $pull
的评论。
router.delete("/comment/:id/:comment_/id", async function (req, res)
try
const post = await Post.findByIdAndUpdate(
req.params.id,
$pull: comments: _id:req.params.comment_id,
,
new: true
);
if (!post)
return res.status(400).send("Post not found");
catch (err)
console.log(err);
res.status(500).send("Something went wrong");
);
【讨论】:
什么都没有被删除,我用同样的 cmets 得到同样的帖子 我修复了这个问题,它应该是:`$pull: cmets: _id: req.params.comment_id `,谢谢你的帮助!以上是关于如何使用 mongoose 和 nodejs 删除嵌套在 Post 模式中的评论?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 NodeJS、Mongoose 和 TypeScript 中使用日期和时间?
Mongoose deleteMany 在 nodejs 上使用 _id
如何使用 Mongoose、Express、Angular 4 和 NodeJS 上传/保存和显示图片