mongoose如何自动删除过期数据?

发布于 2022-09-11 22:37:14 字数 509 浏览 13 评论 0

设置了以下字段并不起作用。。。

const Schema = mongoose.Schema;
const mailCodeSchema = new Schema({
    username: {
        type: String,
        required: true
    },
    code: {
        type: Number,
        required: true
    },
    createdAt: {
        type: Date,
        expires: 60
    }
});
const mailCode = code_db.model('mail_code', mailCodeSchema);


await mailCode.create({
                username: email,
                code,
                createAt: Date.now()
            })

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

九公里浅绿 2022-09-18 22:37:14

查了一下mongoose文档,正确的写法似乎是:

...
createdAt: {
    type: Date,
    index: {expires: 60}
}
...

注意这个方法实际上是在集合上创建了一个TTL Index。这个索引完全可以通过手工创建,并且也推荐在生产环境中使用手工创建,原因如下:

  • 假设你的项目已经运行过一段时间,积累了一定量的数据;
  • 此时上面的代码上线了,第一次运行时将会自动开始创建TTL Index;
  • 由于你的集合已经有一定数据,这个创建索引的过程将需要锁定表一段时间才可以完成,这段时间内是无法对该表做任何操作的;

这个过程会导致你的生产环境在一段时间内无法访问,并且很难预料恢复时间,因此不如在生产环境维护时间创建索引,或者在创建索引时使用{background: true},或者使用滚动创建索引的方式。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文