介绍
mongoose-plugin-soft-deleted
是一个用于 mongoose 的软删除插件,它将所有删除操作转化为将被删除的文档的 deleted
字段设置为 true
。这个插件可以使得我们在不失去数据的情况下,对被删除的文档进行一些排查和管理。
安装
在你的项目中使用 npm 进行安装:
npm install mongoose-plugin-soft-deleted
使用
引入插件
首先,我们需要在与 mongoose 相关的文件中引入插件:
const mongoose = require('mongoose'); const softDeletePlugin = require('mongoose-plugin-soft-deleted'); mongoose.plugin(softDeletePlugin, { deletedAt : true });
我们在引入插件时传入了一个配置参数 deletedAt
,这个配置项表示我们是否要开启 deletedAt
字段,默认是 false
。
假如我们开启了 deletedAt
,插件就会在插入一条被软删除的数据时自动加上 deletedAt
字段,如果不开启这个功能,则有可能在开启这个功能后,已经在数据库中的数据不会包含 deletedAt
这个字段。
在模型中使用插件
接下来,我们可以在具体的模型中使用插件:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ---------- - --- ----------------- ----- ------- ---- ------- -------- - ----- -------- -------- ----- - -- ------------ ------- ----------------------------------- - --------- - ---- --- -------------- - --------------------------- ------------
这里的 YourSchema
就是你定义的模型,我们为它添加了 deleted
字段作为软删除标识,在模型定义之后,需要使用我们在全局引入的软删除插件加上它:
YourSchema.plugin(softDeletePlugin, { deletedAt : true });
这里,我们使用了配置参数 deletedAt : true
,开启了 deletedAt
字段,并表示所有被删除的文档都有这个字段。
硬删除数据
当需要进行硬删除时,你可以直接使用 mongoose 的 deleteOne()
方法:
YourModel.deleteOne({ _id: id }, (err) => { if (err) { console.log(err); } else { console.log('Delete success!'); } })
软删除数据
当需要进行软删除时,插件将操作转化为将 deleted
字段设置为 true
。这就意味着,软删除的数据还可以通过查询的方式查找,但是它们的 deleted
字段均为 true
:
-- -------------------- ---- ------- -------------------- - ---- -- -- - -------- ---- -- ----- ------- -- - -- ----- - ----------------- - ---- - ------------------- ----------- - - -
恢复数据
软删除后,如果需要进行数据的恢复,我们可以通过将 deleted
字段设置为 false
来实现:
-- -------------------- ---- ------- -------------------- - ---- -- -- - -------- ----- -- ----- ------- -- - -- ----- - ----------------- - ---- - -------------------- ----------- - - -
这里需要注意的是:这个设置只是单纯的将 deleted
字段设置为 false
,并不能恢复被软删除的文档的原始数据。
示例代码
在这里,我们提供一个简单的使用示例代码:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ---------------- - ---------------------------------------- -- ----- --------------------------------------------------------- - ---------------- ----- ------------------- ----- ----------------- ----- --- -- ---- ----- ---------- - --- ----------------- ----- ------- ---- ------- -------- - ----- -------- -------- ----- - -- ------------ ------- -- ---- ----------------------------------- - ---------- ---- --- -- ------ ----- --------- - --------------------------- ------------ -- ---- ------------------ ----- ------- ---- -- -- -------- -- - ------------------- ----------- -- ------------ -- - ----------------- --- -- ----- -------------------- - ----- ------ -- - -------- ---- -- ----- ------- -- - -- ----- - ----------------- - ---- - ----------------- ------ ----------- - - - -- -------- ---------------- -------- ---- -- ----- -------- -- - ------------------------- --------- -- -- ---- -------------------- - ----- ------ -- - -------- ----- -- ----- ------- -- - -- ----- - ----------------- - ---- - -------------------- ----------- - - - -- ---- --------------------- ----- ------ -- ----- -- - -- ----- - ----------------- - ---- - ------------------- ----------- - --
结论
通过这篇文章,我们学习了使用 mongoose-plugin-soft-deleted
插件进行软删除的方法,并提供了详细的代码示例。软删除可以方便我们对被删除的文档进行管理和检查,同时也可以帮助我们保护数据的完整性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60065b46c6eb7e50355dbef3