相关文章推荐
刚失恋的回锅肉  ·  MySQL到ADB ...·  1 年前    · 
狂野的台灯  ·  前端问题之TS7006: ...·  1 年前    · 
个性的草稿本  ·  System error 67 has ...·  1 年前    · 

1.指定在某个时间删除文件

给collection创建一个expire索引

db.logAutoDel.createIndex({"expireAt":1}, {"expireAfterSeconds":0})
### expireAt字段可自定义名称

插入一条数据试试,插入数据时带上expireAt字段

db.logAutoDel.insert({"createAt":new Date(), "msg":"hello world~~~"})

2.指定在创建时间后的某个期限删除

db.logAutoDel.createIndex({"createAt":1}, {"expireAfterSeconds":0})
## createAt字段可自定义

插入一条数据试试

db.logAutoDel.insert({"createAt":new Date(), "msg":"hello world~~~"})
 

测试可能无效的原因

MongoDB的TTL线程每60s才会执行一次
如果需要精确到1分钟之内可以自行调整TTL的执行周期

pymongo

在python中插入时间可以用datetime.datetime.utcnow() 来获取对应格式的时间
如果要设定当前时间的1h后可以用datetime.datetime.utcnow()+datetime.timedelta(seconds=3600)

几个须掌握的相关操作命令

1.查看当前所有索引

db.logAutoDel.getIndexes()
		"v" : 2,
		"key" : {
			"_id" : 1
		"name" : "_id_",
		"ns" : "bm_hub.logAutoDel"
		"v" : 2,
		"key" : {
			"createAt" : 1,
			"expireAfterSeconds" : 10
		"name" : "createAt_1_expireAfterSeconds_10",
		"ns" : "bm_hub.logAutoDel"

2.删除某个索引

# 找到对应的name即可
db.logAutoDel.dropIndex("createAt_1_expireAfterSeconds_10")

https://stackoverflow.com/questions/27976726/mongodb-ttl-not-working

最近由于公司业务需求,对于3个月前的过期数据需要进行删除动作,以释放空间和方便维护 本来想的是使用crontab写个脚本定时执行,但是看到Mongo本身就有自动删除过期数据的功能,所以还是用一下吧 这个方法就是使用TTL索引,后续我再写一个脚本定时删除的任务,关于TTL索引的更多使用实例,大家可以参考学习这篇文章:https://www.jb51.net/article/126810.htm TTL索引MongoDB中一种特殊的索引, 可以支持文档在一定时间之后自动过期删除,目前TTL索引只能在单字段上建立,并且字段类型必须是date类型或者包含有date类型的数组 //db.fs.files.find({"uploadDate":{$lt: new Date(2021,04,24)}}) //删除数据 日期小于 2021-04-01 的数据 db.fs.files.remove({"uploadDate":{$lt: new Date(2021,04,01)}})
1.今天要做一个验证码一样的东西,让用户通过校验。 下面这段是设置以createTime为过期时间的索引,意思就是一条数据以其中createTime的字段时间为准,超过该字段时间将这条数据删除。 {expireAfterSeconds:0} 设置为0 时间一到立马删除。 { expireAfterSeconds: 60*2 } 设置延时秒,以设置的延时秒为准,到时间以设置的延时为基准删除数...
​ TTL (Time To Live, 有生命周期的) 索引是特殊单字段索引MongoDB可以用来在一定时间后自动从集合中删除文档的特殊索引。 这对于某些类型的数据非常好,例如机器生成的事件数据,日志和会话信息,这些信息只需要在数据库中保留一段时间。 ​ 创建 TTL 索引,只需要在使用 db.collection.createIndex() 方法,对字段值为日期或者包含日期的数...
固定集合是具**有固定大小**的循环集合,遵循插入顺序,以支持高性能的创建、读取和删除操作。通过循环,当分配给集合的固定大小用完时,它将删除集合中最旧的文档,而不提供任何显式命令。 TTL 索引是特殊的单字段索引MongoDB 可以使用它在一定时间或特定时钟时间后自动从集合中删除文档。
注意:以下集中情况是无法使用TTL索引的 (1)TTL索引是单字段索引,混合索引不支持TTL,并且也会忽略expireAfterSeconds属性 (2)在_id 主键上不能建立TTL索引 (3)在capped collection中不能建立TTL索引,因为MongoDB不能从capped co...
在工作过程中,我们难免会遇到这样的问题,我们想保存一些数据,但是我们对这些数据的要求并不高,有时候往往只是想要某个时间范围内的数据,比如我们如果永远只关心从当前时间往前推半年内的数据特性,那么我们就不需要将所有数据都保存起来,因为不仅浪费磁盘空间,而且随着数据量的不断累积,其他性能也会受到影响。 这时候我们迫切的需要一直方法能够在我们插入数据的时候自动的帮我们去删除我们过一段时间就不想要的数据,
由于公司业务需求,对于3个月前的过期数据需要进行删除动作,以释放空间和方便维护 本来想的是使用crontab写个脚本定时执行,但是看到Mongo本身就有自动删除过期数据的功能,所以还是用一下吧 这个方法就是使用TTL索引,后续我再写一个脚本定时删除的任务 TTL索引MongoDB中一种特殊的索引, 可以支持文档在一定时间之后自动过期删除,目前TTL索引只能在单字段上建立
mongo文档自动过期删除)有助于减少老旧文档的数量,提高搜索效率 第一,需要mongo设置对某字段设置索引;第二,在插入这个字段时,必须是Date类型;(1)指定过期时间到后删除 创建基于expireAt字段的索引,expireAfterSeconds参数表示过期时间到了,立即删除 // 创建索引 db.c_device_data_record.ensureIndex({expireAt: ...
过期时间的字段创建索引 db.log_events.createIndex( { "expireTime": 1 }, ---字段名称 { expireAfterSeconds: 0 } ) ---过期时间(单位秒) mongdb存的时间是 db.log_events.insert( { "expireTime": new Date('Jan 22, 2019 23:00:00'), ---插入文档时指定自动删除时间 "logEvent": 2, "logMessage