在n天后删除MongoDB文档
问题描述:
我想在3天后删除用户帐户,如果他们不验证他们的电子邮件。由于调度程序效率低下,我正在寻找一种方法来在MongoDB中安排这种删除。如果用户验证电子邮件,我还需要一种取消方法。在n天后删除MongoDB文档
我正在使用mgo作为API for MongoDB,而且我正在运行最新的Go(1.9)。
答
这可以在MongoDB的3.4版
实现您可以沿着使用MongoDB的TTL指数与partial index expression。
尝试users
集合添加以下指标:
db.users.ensureIndex(
{ created_at:1},
{ expireAfterSeconds:259200,
partialFilterExpression:{"verified" : false}})
这与删除所有谁不验证,它已经3天了,他们加入这些用户TTL指数。
答
蒙戈TTL索引只支持一个日期时间,没有进一步的条件逻辑多于
if NowDate() > fieldDate { killMe() }
唯一的解决方法我能想到的是...(从MongoDB documentation:萃取)
If the indexed field in a document is not a date or an array that holds a date value(s), the document will not expire.
因此,当用户验证他的电子邮件时,将您的字段设置为null
可能会诀窍。
欢呼
[通过设置TTL从集合中过期数据](https://docs.mongodb.com/manual/tutorial/expire-data/)确实是第一个搜索结果的种类。 –
[MongoDB:如何从集合中删除旧记录?](https://*.com/questions/46441006/mongodb-how-to-remove-older-records-from-a-collection) –