无法使mongoose expires / ttl工作

时间:2014-03-18 04:07:03

标签: javascript node.js mongodb mongoose

var mongoose = require('mongoose'), Cache, cache;

mongoose.connect('mongodb://localhost:27017/test');

Cache = mongoose.model('Cache', mongoose.Schema({
  value: {},
  createdAt: {type: Date, expires: 3600}
}));

cache = new Cache({
  createdAt: new Date(),
  value: {foo: 'bar'}
});
cache.save(function(err, obj) {
  console.log(err, obj);
  process.exit();
});

我试图在一段时间后删除缓存。我等了3分多钟,我插入的文件根本没有被删除。我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

执行此操作的首选方法:

var cacheSchema = mongoose.Schema({
    value: {},
    createdAt: Date
});

cacheSchema.index({ createdAt: 1 }, { expireAfterSeconds: 3600 });

mongoose.model( "Schema", cacheSchema );

因此,index被定义为在建立连接时进行部署并获得正确的创建选项。

分隔Schemamodel实例定义可能是最佳做法。如果您希望在其他地方引用该架构,通常会很方便。

另请参阅有关TTL index创建的MongoDB文档。

但是,日期数学:60秒X 60分钟= 3600

答案 1 :(得分:0)

在mongo shell中运行此命令db.yourdb.getIndexes(),查看已创建的索引。点击此处了解更多信息Mongoose expires property not working properly