0

嗨,我在 mongodb 中遇到了一个称为 ttl 的概念,并在使用 mongoose 的插入操作中尝试了相同的概念。下面是代码

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 的行为及其在这些函数上的性能的任何想法都会非常有帮助。提前致谢

4

1 回答 1

1

mongoose-ttl插件使用自己的隐藏__ttl字段来跟踪文档的到期时间,因此更新您自己的CURDATE字段不会有任何效果。

如果您使用的是 MongoDB 2.2,您应该使用对 TTL 集合的本机支持而不是插件,定义CURDATE为您在上一个问题中讨论的关键字expires段。

于 2013-02-01T14:21:05.143 回答