使用mongoose更改expires index

时间:2015-10-16 15:58:53

标签: node.js mongodb mongoose

我正在使用以下架构来存储一些用户令牌,这些用户令牌应在一定时间后过期(在这种情况下为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')

0 个答案:

没有答案