根据条件使mongoDB中的索引过期

时间:2016-08-06 11:15:19

标签: python mongodb mongoengine ttl

我在Python的boolean模型中有pending个名为Mongoengine的字段。我希望仅在pending=True后1小时内删除该文档。如果我需要在1小时后无条件删除文档,我只会设置过期索引。是否有一些聪明且简单的方法来添加一些条件检查到期索引?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

从MongoDB 3.2版开始,您可以使用部分索引(与TTL索引结合)。

此索引将删除pending = true 1小时内的所有文档。如果在这个小时内文档被更新并且不再有待处理,则不会删除它。

let keys = { lastModifiedDate: -1 };
let options = { 
    expireAfterSeconds: 3600, 
    partialFilterExpression: { pending: true }
};
db.getCollection("collection").createIndex(keys, options);

(虽然这个答案可能不再与你相关,但我相信其他人会发现它在将来会有用)

答案 1 :(得分:1)

我担心不能直接在定期清理过期文档时添加一些自定义逻辑,但如docs中所述,您可以使用过期索引,并且仅在应用程序中设置索引字段{ {1}} - 由于未删除没有过期索引字段的文档,这应该有效,尽管不完全符合您的要求。