Warm tip: This article is reproduced from serverfault.com, please click

node.js-如何从Mongoose的DeleteMany中间件中获取已删除的文档?

(node.js - How to get deleted documents from DeleteMany middleware in Mongoose?)

发布于 2020-11-28 09:54:51

我有一个可以管理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吗?
如果不是,我在这里还有其他选择吗?

Questioner
Two Horses
Viewed
0
lifeisfoo 2020-11-28 20:47:50

deleteMany方法返回具有三个字段的对象:

  • n –匹配文件的数量
  • ok1如果操作成功,则为0
  • deletedCount –删除的文件数

这与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)...