我正在使用以下架构来存储一些用户令牌,这些用户令牌应在一定时间后过期(在这种情况下为30分钟):
var Schema = require('mongoose').Schema;
var tokenSchema = mongoose.Schema({
email: { type: String, required: true, trim: true },
token: { type: String, required: true },
created: { type: Date, expires: 60*30, default: Date.now },
}, {strict: 'throw'});
module.exports = mongoose.model('tokens', tokenSchema);
现在,如果我启动node.js应用程序,我可以使用db.getCollection('tokens').getIndexes()
检查MongoDB以查找此集合上的索引。这导致:
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "node-android.resettokens"
},
{
"v" : 1,
"key" : {
"created" : 1
},
"name" : "created_1",
"ns" : "node-android.resettokens",
"expireAfterSeconds" : 1800,
"background" : true,
"safe" : null
}
]
如果我现在关闭我的节点应用程序,将令牌架构中的expires值更改为不同的值(例如一小时),重新启动我的节点应用程序并再次检查收集索引,我最终得到相同的结果。在第一次将TTL功能设置为10秒以测试其工作状态后,我注意到了此行为,后来发现更改过期值仍然使我的文档很快被删除。
所以我的问题是:有没有办法用新的索引自动覆盖旧的expires索引,还是我必须自己删除它?我是后者的情况,有没有办法在mongoose中执行此操作,或者我是否必须自己通过mongo shell执行db.getCollection('tokens').dropIndex('created_1')
?