如何使用 Typescript 获取 mongoose findOneAndDelete 中间件上的文档?

Eri*_*ima 5 middleware cascade mongoose typescript

谁能帮我解决这个问题吗?

我使用 Typescript 和 mongoose v5.7.6 创建一个 API,该 API 管理用户和车辆,以便车辆具有用户 ID,并且用户具有车辆 ID 列表(mongoose 填充用法)。

我的问题是删除车辆,因为我需要在用户的车辆列表中删除它(级联效应)。我正在使用车辆模型的findByIdAndDelete方法,并为findOneAndDelete创建了预中间件作为文档(https://mongoosejs.com/docs/api/model.html#model_Model.findByIdAndDelete)。

这个findByIdAndDelete方法成功触发了findOneAndDelete中间件,但是如何让正在删除的文档获取其属性作为用户ID呢?

如果我使用删除中间件,我可以访问this元素,但是使用findOneAndDelete中间件,这与 Typescript 上的文档不匹配。

我怎么解决这个问题?

小智 2

根据mongoose文档,findOneAndDelete是一个查询中间件,查询中间件中的这个关键字指的是查询,而不是文档。

如果您只需要相关文档的 ID,那么您可以使用this.getQuery()._id.

但是,如果您需要的信息多于查询中可用的信息,那么您必须使用当前查询在数据库中查询完整文档,如下所示const document = await Model.find(this.getQuery())

文档变量现在将包含相关的完整文档。