Mongodb的TTL特性

avatar 2021年11月12日18:18:48 评论 778 次浏览

TTL是mongoDB集合中对失效时间的设置,可以针对指定时间为期限,超过就自动删除,也可以针对周期型删除,和定时任务一样。超过指定的时间就自动删除,这样滚动进行,保留的数据就是周期。举例说明一下:一个集合中表中的数据是持续插入的,插入的时候加了时间。时间久后,数据量就会特别大,而且旧的数据也不用了,那就需要定时删除的操作,这个时候就需要用到TTL的特性了。看下面的例子:

> db.wulaoer.createIndex({"createdAt": 1},{expireAfterSeconds: 180}) #3分钟后过期
#插入文档
> db.wulaoer.insert({
    "createdAt": new Date(),
    "logEvent": 2,
    "logMessage": "Success!"
})
#查看
> db.wulaoer.find()
{ "_id" : ObjectId("56e219ecf694a8d2cff60cca"), "createdAt" : ISODate("2021-11-11T01:05:48.082Z"), "logEvent" : 2, "logMessage" : "Success!" }
#3分钟后再次查看(已被清除)
> db.wulaoer.find()
>

在集合wulaoer中创建了一个TTL特性,定时的时间是3秒钟,这里的expireAfterSeconds的单位是秒,可以根据自己的时间自己换算一下。上面的定义的3分钟,删除数据后,3分钟自动清理。

> db.wulaoer.createIndex({"expireAt": 1},{expireAfterSeconds:0})
#插入文档
> db.wulaoer.insert({
    "createdAt": new Date('Nov 11, 2021 11:30:00'),
    "logEvent": 2,
    "logMessage": "Success!"
})

第二种是针对结束时间,也就是说11:30之前的删除,之后的一直保留。这样的操作有一个问题,就是后期需要继续修改,如果不修改数据还是持续增加的。两种方式如何使用,还是要看自己的环境,根据不通的需求实现吧。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: