8

ドキュメントの存続時間を設定して破棄する方法はありますか。セッションごとに一時的なゲスト ユーザーを作成したいので、1 週間後にドキュメントは自動的に削除されます。

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 に答える