您好我在mongodb中遇到了一个名为ttl的概念,并在使用mongoose的插入操作中尝试了相同的操作.Below是代码
mongoose = require('mongoose');
var Schema = mongoose.Schema;
var META_CTS_DB = mongoose.createConnection('mongodb://localhost/META');
var ttl= require('mongoose-ttl');
var date1=new Date();
var ServiceSchema = new Schema({
_id:String,
CURDATE:{type:Date,index:true},
SERVICE_PROTOCOL:String,
});
ServiceSchema.plugin(ttl, { ttl:5000 });
var MasterDBdata = META.model('ServiceSchema',ServiceSchema,'API_KEY_91994094177912_SERVICE_ID_0008_SERVICE_CONFIG');
var item = new MasterDBdata({'_id':'SERVICE_ID_0006','CURDATE':date1,'SERVICE_PROTOCOL':'Nil'});
item.save();
ttl工作正常,收集确实被删除。但是当我执行相同的更新功能时,如下所示
MasterDBdata.update({'_id':'SERVICE_ID_0006'},{'CURDATE':date1,'SERVICE_PROTOCOL':'hhl'},{upsert:true},function (err){
if (err) return handleError(err);
console.log('\n data stored in Database...')});
ttl函数似乎没有正常工作。关于ttl行为及其在这些函数上的性能的任何想法都会非常有用。谢谢提前
答案 0 :(得分:1)
mongoose-ttl
插件使用自己隐藏的__ttl
字段来跟踪文档的到期时间,因此更新自己的CURDATE
字段不会产生任何影响。
如果您使用的是MongoDB 2.2,则应该使用TTL集合的本机支持而不是插件,将CURDATE
定义为expires
关键字段,如前一个问题{{1}中所述3}}