ドキュメントの存続時間を設定して破棄する方法はありますか。セッションごとに一時的なゲスト ユーザーを作成したいので、1 週間後にドキュメントは自動的に削除されます。
2 に答える
実際、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
include Mongoid::Timestamps
まず、モデルに追加する必要があります。
次に、実行する cron ジョブまたは何らかのワーカーを追加する必要があります (望まない場合は、おそらくこの gem https://github.com/daddye/foreverbを使用できます) 。
そして、宝石が見えるようにチェックを簡単に設定できます
if model.created_at > 1.week.ago
model.destroy
end