我们正在使用express和mongoose,我们试图每隔1000秒在后台删除一次文档,但是MongoDB会在意外的时间删除。该如何解决?也想知道expires
和expireAfterSeconds
之间的区别。
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);
答案 0 :(得分:0)
两者都到期,expireAfterSeconds使用TTL index:
删除过期文档的后台任务每60秒运行一次。结果,在文档到期和运行后台任务之间的一段时间内,文档可能会保留在集合中。
您的文档有望在2-3分钟内删除。
更新:
检查集合是否具有正确的索引。如果集合已经有猫鼬,则不更新索引。
如果首次创建索引时到期时间为0,则无论您在js代码中所做的任何更改,文档都会在一分钟内被删除,直到删除索引,集合或整个数据库为止。
使用syncIndexes在数据库端更新索引,但要确保在生产中不经常发生索引。在大型馆藏中可能会非常昂贵。