我正在尝试清理我的MongoDB,我想到了adding a TTL index to expire documents。但基于第二个属性,我需要为我的文档提供不同的TTL。
以下是一个例子:
{
"_id" : ObjectId("525bd2aee4b05e96f1ec7362"),
"payload" : "525bd2aee4b05e96f1ec7361",
"serviceId" : "525bd2ade4b05e96f1ec735f",
"status" : "STARTED",
"timestamp" : ISODate("2013-10-14T11:17:01.651Z"),
"transaction " : "525bd2aee4b05e96f1ec7360"
}
我可以在属性timestamp
上设置TTL,但我需要基于serviceId
的不同TTL。这是否可以在 MongoDB 2.2.x ?
答案 0 :(得分:3)
不,TTL索引不包含除if field < now - expireAfterSeconds then delete document
之外的任何条件逻辑。
但是,可能有一种解决方法可能适用于您的情况:如果您希望将来文档过期的具体日期,您可以添加一个您设置为日期的字段expireDate
将来您希望文档过期。然后,当您使用expireAfterSeconds
创建索引为0时,每个文档在expireDate
通过后都将被删除。这个技巧允许您在同一个集合中包含具有不同TTL的文档。
答案 1 :(得分:0)
虽然@ Philipp的答案非常有用。还有另一种方式。您可以在集合中添加一个新字段,其中包含serviceId的时间戳,并且在timestamp
上有一个TTL索引,另一个在serviceIdTimestamp
上。