使用Mongoose / Node.js设置对象的TTL / Expires

时间:2013-12-10 11:14:54

标签: javascript node.js mongodb heroku mongoose

编辑1

实际上经过进一步的调查后,似乎MogoDB只持有最近的7条记录,这与我将对象发送到猫鼬的方式有关,是否会覆盖它们?

我删除了对TTL / Timeout的所有引用,我只看到最近的7个对象(有7个不同的对象要存储,但随着时间的推移有多个值)。

非常感谢!

由于

加雷

这在文档中似乎很简单,但我无法让它工作。

我创建了一个如下所示的模板:

var trackingSchema = new mongoose.Schema({
VehicleID: {type: String, min: 0}, 
Label: {type: String, min: 0},
RegNumber: {type: String, min: 0},
VehPosDateTimeUTC: {type: String, min: 0},
Latitude: {type: String, min: 0},
Longitude: {type: String, min: 0},
Heading: {type: String, min: 0},
SpeedKPH: {type: String, min: 0},
OdometerKM: {type: String, min: 0},
SpeedMPH: {type: String, min: 0},
OdometerMiles: {type: String, min: 0},
EventCode: {type: String, min: 0},
GpsStrength: {type: String, min: 0},
Owner: {type: String, min: 0},
DriverName: {type: String, min: 0},
DriverID: {type: String, min: 0},
EventCodeId: {type: String, min: 0},
EventType: {type: String, min: 0},
createdAt: { type: Date, default : Date.now, expires: '1d'},
});

然而,当通过猫鼬创建对象时,进入Mongolab集的记录最多只保留1分钟。

我也尝试过createdAt行的其他变种,例如:

createdAt: { type: Date, default : Date.now, expires: 6000 }

现在我认为这可能与时区有关,但我不确定如何解决这个问题?

这是我用来将对象提交到mongoose的代码:

// Creating one vehicle record.
var vehicleData = new   trackingRecord ({
VehicleID:   responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].VehicleID[0], 
Label: responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].Label[0],
RegNumber: responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].RegNumber[0],
VehPosDateTimeUTC:responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].VehPosDateTimeUTC[0],
Latitude: responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].Latitude[0],
Longitude: responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].Longitude[0],
Heading: responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].Heading[0],
SpeedKPH: responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].SpeedKPH[0],
OdometerKM: responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].OdometerKM[0],
SpeedMPH: responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].SpeedMPH[0],
OdometerMiles: responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].OdometerMiles[0],
EventCode: responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].EventCode[0],
GpsStrength: responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].GpsStrength[0],
Owner: responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].Owner[0],
DriverName: responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].DriverName[0],
DriverID: responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].DriverID[0],
EventCodeId: responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].EventCodeId[0],
EventType: responseJSON.VehPosResponse.position_list[0].CVehiclePos[i].EventType[0]
                                });

// Saving it to the database.
                                vehicleData.save(function (err) {if (err) console.log ('Error on save!')});

1 个答案:

答案 0 :(得分:0)

找到解决方案,似乎在我的测试中我创建了一个单声道的索引,它有一个强制的当前时间戳字段,它也有一个TTL设置。

所以,我必须登录到mongodb并删除此索引才能返回常规行为。现在每次我更改过期时间都会重现它,必须进入,删除所有记录并删除索引以使事物按需运行。

不确定这是不是一个错误,但是它让我在几个小时的时间里撞到那里的墙上!

干杯

加雷