【问题标题】:How to get deleted documents from DeleteMany middleware in Mongoose?如何从 Mongoose 的 DeleteMany 中间件中获取已删除的文档?
【发布时间】:2021-03-10 21:15:57
【问题描述】:

我有一个应用程序,我在其中管理 categoriessubcategories
所以每次我删除一个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?
如果不是,我还有什么其他选择?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    deleteMany 方法返回一个包含三个字段的对象:

    • n – 匹配文档数
    • ok - 1 如果操作成功,否则为 0
    • deletedCount – 已删除文档的数量

    这与 mongodb db.collection.deleteMany 方法的行为相同。

    我建议您在模型中添加static method

    // 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)...
    

    【讨论】:

      猜你喜欢
      • 2021-08-19
      • 2020-07-29
      • 2019-01-02
      • 2021-04-02
      • 1970-01-01
      • 2016-05-06
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多