Mongoose Delete 插件

功能

  • 添加了 delete() 方法。
  • 添加了 deleteById() 方法。
  • 在documents上添加了 deleted 这个属性(Boolean)
  • 添加deteledAt属性用来保存删除的时间。
  • 添加deletedBy属性来记录谁删除了document。
  • 使用restore回复已经删除的文档。
  • 批量删除和恢复。
  • 可选择是否重写静态的方法(count, countDocuments, find, findOne, findOneAndUpdate, update, updateMany))
  • 对于可重写的方法额外提供了两个方法: methodDeleted,methodWithDeleted
  • 在删除时禁用模型的校验
  • 可选择 在删除的fields创建索引
  • 可选择是否禁用 $ne操作符 通过使用{use$neOperator: false}

使用

mongoose中的删除操作有remove,findByIdAndRemove,findOneAndRemove.这些方法都不会执行软删除

对于删除操作,要是用deletedeleteById方法来删除数据是软删除。

谁删除了数据。 添加 {deletedBy : true } link

重写方法

可选择重写所有或者指定的方法。

目的: 重写方法将排除掉删除的document,(删除的document都有deleted = true)

每个重写的方法都会有两个额外的方法。(methodDeleted,methodWithDeleted

支持的可选重写方法。 ['count', 'countDocuments', 'find', 'findOne', 'findOneAndUpdate', 'update', 'updateMany', ]

find方法为例。

配置为

{
  overrideMethods: ['find']
}

除了find方法以外会有findDeleted,findWithDeleted

  • find 方法返回所有除了deleted=false的数据
  • findDeleted 方法返回所有delted=true的数据
  • findWithDeleted返回所有数据

删除时禁用model的校验

默认情况下,该插件开启校验。


Schema.plugin(mongoose_delete)
Schema.plugin(mongoose_delete,{
  validateBeforeDelete: true
})

validateBeforeDelete设置为false,就不会校验

创建索引

PetSchema.plugin(mongoose_delete, { indexFields: 'all' });
// or
PetSchema.plugin(mongoose_delete, { indexFields: true });

对于deleted,deletedAt,deletedBy三个字段都添加索引

// Index only specific fields
PetSchema.plugin(mongoose_delete, { indexFields: ['deleted', 'deletedBy'] });
// or
PetSchema.plugin(mongoose_delete, { indexFields: ['deletedAt'] });

对指定的字段添加索引。(指定也是在3者之间)


最普通的一个
301 声望41 粉丝

永远不要做你擅长的事。


引用和评论

0 条评论