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

Expire index in mongoDB based on condition

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

提前致谢!

恐怕无法直接将一些自定义逻辑添加到过期文档的定期清理中,但如 docs 中所述,您可以使用过期索引并仅从您的应用程序中设置索引字段如果 pending = True - 因为没有删除过期索引字段的文档,这应该可以工作,尽管不完全符合您的要求。

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

该索引将删除 pending = true 1 小时内的所有文档。如果在这个小时内更新了文档并且不再处于待处理状态,则不会将其删除。

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

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