使用mongoose在mongodb中处理upsert函数时,TTL无法正常工作

时间:2013-02-01 05:31:55

标签: node.js mongodb mongoose ttl

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

1 个答案:

答案 0 :(得分:1)

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

如果您使用的是MongoDB 2.2,则应该使用TTL集合的本机支持而不是插件,将CURDATE定义为expires关键字段,如前一个问题{{1}中所述3}}