2016-11-30 55 views
1

我知道有可能消除时保存的日期去世与此命令的一些文件:删除文件,如果时间戳太旧

db.course.deleteMany({date: {"$lt": ISODate()}}) 

我试图做同样的事情,但我想检查一个时间戳被去世

所有保存的时间戳是这样一个

1492466400000 

是否有可能使符合条件的命令删除所有文件与太旧时间邮票?

编辑

我用毫秒时间戳

+0

你是什么意思*太老时间戳*?你有一个特定的价值吗? – styvane

+0

@Styvane例如,这个时间戳“1479464200000”(2016年11月18日)是一个旧的,但'1480933000000'(2016年12月5日)是一个很好的。如果给定的时间戳等于比当前日期更早的日期,则它是旧的 –

回答

0

我觉得要做到这一点

db.course.deleteMany({date: {"$lt": ISODate()*1}}) 

ISODate()*1条件将日期转换成时间戳的方式

ISODate(timestamp)将时间戳转换为日期。

1

在MongoDB 3.2中,您还可以使用TTL索引,您可以对MongoDB说“如果{fieldDate}比3600秒更老,请删除所有文档”。这对于日志记录非常有用(删除所有更早3个月的日志)。

也许不是你的用例,但我觉得很好知道。

TL索引是特殊的单字段索引,MongoDB可以使用这些索引在特定时间或特定时间段后自动从集合中删除文档。数据过期对于某些类型的信息非常有用,例如机器生成的事件数据,日志和会话信息,这些信息只需要在有限的时间内保留在数据库中。

db.eventlog.createIndex({ "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 }) 

https://docs.mongodb.com/v3.2/core/index-ttl/