在使用猫鼬删除此文档之前,如何删除文档中引用的文件?

时间:2021-02-10 17:01:24

标签: mongoose hook

我在 mongodb 中有一个文档集合,该集合的每个文档都跟踪服务器上的一个文件,我想在删除相应文档时删除一个文件。 ¿我该怎么做?,将使用查询大量删除文档。

我有以下模型:

const AudioSchema = new Schema({
 file: String,
 title: String,
 user: { type: Schema.Types.ObjectId, ref: 'Users' },
})
mongoose.model('Audio', AudioSchema)

如您所见,每个文档都会跟踪服务器文件系统中存在的文件,如果文档被删除,我想删除该文件。通常删除这些文档的方式是通过模型查询,(不是使用文档挂钩的选项,只是模型挂钩)示例:

const result = await Audio.deleteOne({
  _id: audioannotation_id,}).exec()

我知道如果文档被文档删除了,我可以像这样使用“pree”钩子

AudioSchema.pre('deleteOne',{ query: false , document : true}, function(){
  fs.unlink(this.file, err => { throw err})
})

但正如我之前提到的,强制不要使用文档钩子,因为使用模型查询会大量删除这些类型的文档。

如果我使用模型挂钩,我无法知道将删除哪个文档,因为 *this 不能作为对将被删除的文档的引用。

Audio.pre('deleteOne',{ query: true , document : false}, function(){
  this.file // In this case **this** is not referencing the current document to be deleted
})

有什么建议吗?

0 个答案:

没有答案