8

有没有办法为文件设定时间,然后它会被销毁。我想创建每个会话临时的来宾用户,因此一周后文档会自动删除。

4

2 回答 2

23

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
于 2013-04-19T23:56:48.033 回答
-1

首先,您应该添加include Mongoid::Timestamps到您的模型中。

其次,您应该添加一个 cron 作业或某种可以运行的工作人员(如果您不想要,也许您可​​以使用这个 gem https://github.com/daddye/foreverb

然后您可以轻松设置检查以查看宝石

if model.created_at > 1.week.ago
  model.destroy
end
于 2013-02-04T11:04:29.403 回答