在 mongoose 中删除评论 parents

Delete comment parents in mongoose

我正在使用 typegoose 和 type-graphql。 我有一个 CommentModel,它有一个 parentId 字段,用于存储其 parent 评论的 ObjectId。

我想要什么?

我想使用 pre 中间件自动删除 parents。意味着当我删除评论时,我希望它删除所有 parentId 等于目标评论 ID 的评论。

例子:

所以,当我删除评论 2 时,我希望评论 1 也会被删除。

comment: [
    {
        _id: 1,
        parentId: 2
    }, 
    {
        _id: 2,
        parentId: null
    }
]

但是我不能。

我做了什么?

这是我的中间件:

@pre(/remove|delete/i, async function () {
    await CommentModel.deleteMany({ parentId: this._id })
})
export class Comment {
   ...
}

export const CommentModel = getModelForClass(Comment)

这就是我删除的方式

await CommentModel.findByIdAndDelete(ID_OF_COMMENT)

此操作永远不会完成。并始终向我展示加载微调器。 你有什么建议?我做错了吗?或者有更好的方法?

每个中间件都有一个下一个函数来继续像这样改变它:

@pre(/remove|delete/i, async function (next) {
await CommentModel.deleteMany({ parentId: this._id })
next();
})

我是这样修复的:

@post(/remove|delete/i, async function (comment: DocumentType<Comment> | null) {
    if (comment?._id) {
        const children = await CommentModel.find({ parentId: comment._id }).lean().exec()
        await CommentModel.deleteMany({ parentId: comment._id })
        if (children) {
            await Promise.all(children.map(child => child?._id && CommentModel.deleteMany({ parentId: child._id })))
        }
    }
})