有没有办法为文档设置生存时间,然后将其销毁。我想创建每个会话都是临时用户的访客用户,因此一个星期后文档会自动删除。Mongoid文档生存时间
4
A
回答
19
的MongoDB(2.2及更高版本),实际上有一个特殊的索引类型,它允许您指定的文件上的TTL(见http://docs.mongodb.org/manual/tutorial/expire-data/)。数据库为你删除过期的文件 - 不需要cron作业或任何东西。
Mongoid支持此功能如下:
index({created_at: 1}, {expire_after_seconds: 1.week})
的created_at
字段必须保存日期/时间信息。将Mongoid::Timestamps
包含在您的模型中即可免费获取。
UPDATE:
如果要到期仅部分文档,那么你可以创建一个只填入该子集的特殊日期/时间字段。在索引字段中没有值或非日期/时间值的文档永远不会过期。例如:
# Special date/time field to base expirations on.
field :expirable_created_at, type: Time
# TTL index on the above field.
index({expirable_created_at: 1}, {expire_after_seconds: 1.week})
# Callback to set `expirable_created_at` only for guest roles.
before_create :set_expire, if: "role == :guest"
def set_expire
self.expirable_created_at = Time.now
return true
end
0
首先,您应该将include Mongoid::Timestamps
添加到您的模型中。
其次你应该添加一个cron作业或某种形式的工人将运行(如果你不想或者您可以使用此宝石https://github.com/daddye/foreverb)
然后你就可以轻松地设置了一个检查宝石看到
if model.created_at > 1.week.ago
model.destroy
end
相关问题
- 1. 保存嵌入文档mongoid
- 2. 命名空间内的Mongoid文档
- 3. Mongoid在rails中不保存文档
- 4. mongoid嵌入文档
- 5. Mongoid随机文档
- 6. Mongoid嵌入式文档中的时间戳
- 7. 使用mongoid保存/销毁文档时忽略验证
- 8. 只有在使用Mongoid嵌入文档时才保留文档?
- 9. 作为数字存储时间戳Mongoid
- 10. Mongoid通过嵌入文档
- 11. 的form_for为Mongoid ::文档子
- 12. 用mongoId获取“previous”文档
- 13. 生成存档时出错
- 14. 如何检查mongoid中的文档中是否存在嵌入式文档?
- 15. 在Mongo集合之间移动文档(通过Mongoid)
- 16. Mongoid时间戳索引
- 17. Mongoid,与嵌入式文档与时间戳和版本控制混淆?
- 18. Mongoid命名范围比较同一文档中的两个时间字段
- 19. 生存分析中的生存时间
- 20. mongoid即使目前+轮胎+ mongoid也没有找到文档
- 21. Rails Mongoid:查询嵌入式文档并访问Mongoid标准
- 22. 尽管自定义验证无效,但Mongoid保存文档
- 23. 为什么这个Mongoid文档只能保存一个孩子?
- 24. 保存在Mongoid中替换嵌入文档
- 25. Mongoid embeds_many:推送文档而不保存以保留脏状态
- 26. Rails和mongoid:保存/更新引用文档时,在引用的文档上调用验证?
- 27. 存储时区与Mongoid
- 28. Mongoid - 如何使用嵌入式文档创建文档?
- 29. 将文档直接嵌入到具有mongoid的文档中
- 30. 包含引用文档ID的Mongoid查询文档
好的,但我只需要TTL只在一系列的文件在我的情况下来宾用户。 user.role = guest,我不认为这个功能那么做 –
我没有意识到你只需要过期集合的一个子集。这是一个想法:因为索引需要日期/时间值,所以对于非访客用户,只需将索引字段设置为“nil”,并且它们永远不会过期。在这种情况下,我会创建一个特殊的日期/时间字段(而不是使用标准'created_at')。 – wyattisimo
我更新了我的答案,以包含仅限客人角色过期的示例。 – wyattisimo