【发布时间】:2016-05-12 17:27:03
【问题描述】:
我想要完成一项特定的任务,但我没有找到任何特定的方法来做到这一点。 假设我有一个用于发送邮件的应用程序。我将这些电子邮件记录在 mongo 的集合中。使用这个应用程序,我可以立即发送邮件,也可以安排将来的电子邮件。 集合中文档的结构如下:
{
'_id' : 123456789,
'to_email' : 'xyz@gmail.com'
'from_email' : 'abc@gmail.com'
'subject': 'some subject'
'type' : '<1 if normal and 2 if scheduled>',
'createdDate' '<date when mail was sent or the request was created>',
'scheduledDate' : '<time for which mail is scheduled>'
.. and many more key-value pairs
}
scheduledDate 字段可以是零或任何日期,具体取决于它是否已安排。
我不想保留超过 2 天的数据,所以我在“createdDate”上创建了一个 TTL 索引 2 天。
但我也不想删除为将来安排的行或请求。
我一直在寻找某种有条件的 TTL,但找不到任何这样的解决方案。
在 MongoDB 中是否有任何可用的方法,例如条件 TTL 或任何其他方式。
我想创建一个 TTL,其工作方式如下:
if(requestType!=2 and createdDate < -2days)
delete row;
或者有什么方法可以让我使用任何语言对某些文档进行更改,以免它们过期。
编辑:我解决了这个问题,在预定电子邮件的情况下使用 scheduledDate 和 createdDate 的相同值。
【问题讨论】:
-
请分享 scheduleDate 的架构类型。我尝试创建类型:Date,默认值:new Date()。因此,如果条目为零,则它将在 5 分钟内被删除,如果条目有日期,则不会被删除。但是在插入之后,我检查而不是像这样使用 ISO (00:00:00-000z) 保存 0 时间格式。我想初始存储 0(数字格式),然后当条件出现时,它将保存当前的 ISO 日期时间戳。这样在特定分钟后只有 0 oen 会删除
标签: mongodb mongodb-query mongodb-indexes