【发布时间】:2015-09-22 20:17:58
【问题描述】:
我需要在指定时间不被访问后删除mongodb文档。
我有一个访问令牌,用于从外部来源检索数据并将其保存在我的数据库中。
在我的会话中,我存储了一个用户 ID,当用户发出请求时,我可以使用检索访问令牌。
如果我的会话过期,我的数据库中保存的访问令牌将永远不会再次使用。
将提示用户重新进行身份验证,并将新的访问令牌保存在数据库中。
如果用户明确注销,我可以轻松地从数据库中删除现在无效的访问令牌。但是如果他们从不注销并且会话过期,那么数据库条目将无限期地保留。
我考虑过检测会话到期并运行一个函数以从我的数据库中删除关联的访问令牌,但是如果在应用程序未运行时会话到期怎么办。
我认为我需要一些维护工作,例如 cron 作业或我的数据库上的某些东西,以便在特定时期不被访问后删除文档,
我将如何使用 mongoDB 来解决这个问题?
【问题讨论】:
-
显示要删除的文档定义。但实际上你应该关注直接来自在线手册的Expire Data from Collections by Setting TTL。
-
您可以在每条记录中存储
lastAccessTime(每次访问时更新它),运行调度程序删除所有lastAccessTime超过指定时间段的记录。 -
文档定义很简单 { id: String, accessToken: String },我不认为 TTL 是我正在寻找的,因为我希望文档在经常被访问时保留。如果它在特定时间段内不活动,则将其删除。我将研究在 nodejs 中调度作业(我以前从未这样做过)并按照 HarshPatel 的建议使用 lastAccessTime
标签: node.js mongodb express express-session