我有一个可以管理categories
和管理的应用程序subcategories
。
因此,每次删除a时category
,我都有一个 Mongoose 中间件,该中间件会删除所有subcategories
属于它的人。
schema.post('findOneAndDelete',
(category: CategoryDocument) => subcategoryModel.deleteMany({ category: category.id }))
当我只删除一个时category
,效果很好,当删除多个时会发生什么?
我尝试过注册deleteMany
中间件,如下所示:
schema.post('deleteMany',
(deletedQueryResult: any) => {})
但是deleteMany
中间件只是将查询结果(花费的时间,删除的文档数以及一些内部的mongoose / mongodb属性)发送到我的回调中。
无论如何,我可以在 Mongoose 中间件中获取已删除的文档或其ID吗?
如果不是,我在这里还有其他选择吗?
该deleteMany
方法返回具有三个字段的对象:
n
–匹配文件的数量ok
–1
如果操作成功,则为0deletedCount
–删除的文件数这与mongodbdb.collection.deleteMany
方法的行为相同。
我建议你向模型添加静态方法:
// Assign a function to the "statics" object of our schema
categorySchema.statics.deleteManyWithSubs = async function(catIds) {
const deleteQuery = /*your delete query using catIDs*/
const delRes = await this.deleteMany(deleteQuery);
catIds.forEach(id => {
await subcategoryModel.deleteMany({ category: id })
});
return true;
};
// Usage
categoryModel.deleteManyWithSubs(ids)...