根据条件使 mongoDB 中的索引过期
Expire index in mongoDB based on condition
我在 Python 的 Mongoengine
模型中有一个名为 pending
的 boolean
字段。仅当 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);
(虽然这个答案可能与你不再相关,但我相信将来会有其他人发现它有用)
我在 Python 的 Mongoengine
模型中有一个名为 pending
的 boolean
字段。仅当 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);
(虽然这个答案可能与你不再相关,但我相信将来会有其他人发现它有用)