猫鼬每隔一分钟删除所有文档,并且不接受来自`expires`和`expireAfterSeconds`的时间

时间:2019-06-13 12:04:08

标签: mongodb express mongoose

我们正在使用express和mongoose,我们试图每隔1000秒在后台删除一次文档,但是MongoDB会在意外的时间删除。该如何解决?也想知道expiresexpireAfterSeconds之间的区别。

MongoDB-v3.6.5, 猫鼬-5.4.3, 快递-4.16.4

样本模型:

const mongoose = require('mongoose');
mongoose.set('useCreateIndex', true);

const forgotPassword = mongoose.Schema({
    email: { type: String, required: [true, 'Email field is required']},
    expiresAt: { type: Date, expires: '2m', default: Date.now }
}, { timestamps: true, versionKey: false, strict: false });

forgotPassword.index({ expiresAt: 1 }, { expireAfterSeconds : 1000 });
module.exports = mongoose.model('forgotpassword', forgotPassword);

1 个答案:

答案 0 :(得分:0)

两者都到期,expireAfterSeconds使用TTL index

  

删除过期文档的后台任务每60秒运行一次。结果,在文档到期和运行后台任务之间的一段时间内,文档可能会保留在集合中。

您的文档有望在2-3分钟内删除。

更新

检查集合是否具有正确的索引。如果集合已经有猫鼬,则不更新索引。

如果首次创建索引时到期时间为0,则无论您在js代码中所做的任何更改,文档都会在一分钟内被删除,直到删除索引,集合或整个数据库为止。

使用syncIndexes在数据库端更新索引,但要确保在生产中不经常发生索引。在大型馆藏中可能会非常昂贵。