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

gil*_*iev 4 python ttl mongodb mongoengine

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

先感谢您!

Duš*_*jka 11

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

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

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

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


DAX*_*lic 1

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