使用 mongoose 的文档不会在 mongodb 后过期
Document not expiring in mongodb using mongoose
我将刷新令牌存储在 mongodb 数据库中。出于测试目的,我希望它们在 4 分钟内过期。出于某种原因,这个东西对我不起作用。
const mongoose = require('mongoose');
let schema = new mongoose.Schema({
token: {
type: String,
required: true
},
username: {
type: String,
required: true
},
email: {
type: String,
required: true
},
});
schema.index({expireAt: 1}, {expiresAfterSeconds: 240}); //4 mins * 60 seconds
let model = mongoose.model('refresh_token', schema);
module.exports = model;
这是我的文件的完整代码。我正在使用它来创建刷新令牌。截至目前,该项目持续了一个小时。请指出我的错误。
您正在尝试使用以下命令创建索引。
schema.index({expireAt: 1}, {expiresAfterSeconds: 240});
但是字段 expireAt
在您的架构中不存在。根据 mongo 文档 :-
If a document does not contain the indexed field, the document will not expire.
好的,我解决了这个问题,这是我的失误。
如果您正在使用猫鼬并进行测试,您很可能会更改 TTL 过期时间。我正在更改它以查看它是否正常工作并用于不同的测试目的,但是一旦在图集中创建了文档,请求不同的 TTL 时间将不会覆盖前一个。我把时间从 30 个月改为 5 分钟,为了测试目的做了很多波动。
所以记住这一点,一旦创建模型,TTL将被锁定,你需要删除集合并重新构建它,否则你必须在图集中手动更改TTL设置(我没有' t checked this out because my problem was solved only with this and I was in testing mode of my application)。还有
thanks to wak786
提议再次查看文档。当我阅读索引的工作原理时,它点击了。
删除集合(实际上重命名)后,我的最终刷新令牌文件如下所示。
const mongoose = require('mongoose');
let schema = new mongoose.Schema({
token: {
type: String,
required: true
},
username: {
type: String,
required: true
},
email: {
type: String,
required: true
},
createdAt: {
type: Date,
default: new Date()
}
});
schema.index({"createdAt": 1}, {expireAfterSeconds: 2592000}); //30days * 24hours * 60 minutes * 60 seconds
let model = mongoose.model('token', schema);
module.exports = model;
我将刷新令牌存储在 mongodb 数据库中。出于测试目的,我希望它们在 4 分钟内过期。出于某种原因,这个东西对我不起作用。
const mongoose = require('mongoose');
let schema = new mongoose.Schema({
token: {
type: String,
required: true
},
username: {
type: String,
required: true
},
email: {
type: String,
required: true
},
});
schema.index({expireAt: 1}, {expiresAfterSeconds: 240}); //4 mins * 60 seconds
let model = mongoose.model('refresh_token', schema);
module.exports = model;
这是我的文件的完整代码。我正在使用它来创建刷新令牌。截至目前,该项目持续了一个小时。请指出我的错误。
您正在尝试使用以下命令创建索引。
schema.index({expireAt: 1}, {expiresAfterSeconds: 240});
但是字段 expireAt
在您的架构中不存在。根据 mongo 文档 :-
If a document does not contain the indexed field, the document will not expire.
好的,我解决了这个问题,这是我的失误。
如果您正在使用猫鼬并进行测试,您很可能会更改 TTL 过期时间。我正在更改它以查看它是否正常工作并用于不同的测试目的,但是一旦在图集中创建了文档,请求不同的 TTL 时间将不会覆盖前一个。我把时间从 30 个月改为 5 分钟,为了测试目的做了很多波动。
所以记住这一点,一旦创建模型,TTL将被锁定,你需要删除集合并重新构建它,否则你必须在图集中手动更改TTL设置(我没有' t checked this out because my problem was solved only with this and I was in testing mode of my application)。还有
thanks to wak786
提议再次查看文档。当我阅读索引的工作原理时,它点击了。
删除集合(实际上重命名)后,我的最终刷新令牌文件如下所示。
const mongoose = require('mongoose');
let schema = new mongoose.Schema({
token: {
type: String,
required: true
},
username: {
type: String,
required: true
},
email: {
type: String,
required: true
},
createdAt: {
type: Date,
default: new Date()
}
});
schema.index({"createdAt": 1}, {expireAfterSeconds: 2592000}); //30days * 24hours * 60 minutes * 60 seconds
let model = mongoose.model('token', schema);
module.exports = model;