是否有可能基于多个属性使MongoDB中的数据到期?

时间:2014-10-10 11:53:55

标签: mongodb

我正在尝试清理我的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

中使用

2 个答案:

答案 0 :(得分:3)

不,TTL索引不包含除if field < now - expireAfterSeconds then delete document之外的任何条件逻辑。

但是,可能有一种解决方法可能适用于您的情况:如果您希望将来文档过期的具体日期,您可以添加一个您设置为日期的字段expireDate将来您希望文档过期。然后,当您使用expireAfterSeconds创建索引为0时,每个文档在expireDate通过后都将被删除。这个技巧允许您在同一个集合中包含具有不同TTL的文档。

答案 1 :(得分:0)

虽然@ Philipp的答案非常有用。还有另一种方式。您可以在集合中添加一个新字段,其中包含serviceId的时间戳,并且在timestamp上有一个TTL索引,另一个在serviceIdTimestamp上。