ruby-on-rails - Mongoid文件的生存时间

标签 ruby-on-rails mongoid

有没有一种方法可以设置文档生存时间,然后销毁它。我想创建每个 session 都是临时的 guest 用户,因此一周后该文档将自动删除。

最佳答案

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可免费获得。

更新:

如果只想使文档的一个子集过期,则可以创建一个仅为该子集填充的特殊日期/时间字段。在索引字段中没有值或没有日期/时间值的文档将永远不会过期。例如:

# 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

关于ruby-on-rails - Mongoid文件的生存时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14685271/

相关文章:

ruby-on-rails - 无法在 Rails 应用程序中使用@font-face

ruby-on-rails - 动态分配背景图片 scss/sass

ruby-on-rails - 使用 Cucumber 进行压力测试

ruby-on-rails - Ruby on Rails 4 : test nested resources with rspec not working

Mongoid 关系没有被持久化

ruby-on-rails-3 - 从轻便摩托车::集合中删除的更新 - NoMethodError:#<Moped::Collection 的未定义方法 `update'

ruby-on-rails - 可以 haml 渲染<需要输入类型 ="text">

ruby-on-rails - 每个IP地址一票

mongodb - 在 Mongoid 3.0 中运行时切换数据库

ruby-on-rails - 什么时候需要在 Mongoid 中调用 self.field = ?