以下は、コレクションの有効期限 (TTL) を設定するために mongo ターミナル経由で使用できるコマンドです。
db.log.events.ensureIndex( { "status": 1 }, { expireAfterSeconds: 3600 } )
mongoose を使用して Node.js のコードからこれを行うにはどうすればよいですか?
Mongoose では、フィールドのスキーマ定義のプロパティを使用して、Date
フィールドに TTL インデックスを作成します。expires
// expire docs 3600 seconds after createdAt
new Schema({ createdAt: { type: Date, expires: 3600 }});
ご了承ください:
createdAt
ドキュメントを作成するときに現在の時刻に設定するか、ここでdefault
提案されているようにそれを行うために を追加するかはあなた次第です。
{ createdAt: { type: Date, expires: 3600, default: Date.now }}
有効期限の計算を処理したくない場合や、スキーマの全体的な読みやすさを改善したくない場合は、Mongooseで文字列を指定するexpires
とうまく機能します。
たとえば、ここで を 2m (2 分) に設定するexpires
と、マングースは120 秒に変換されます。
var TestSchema = new mongoose.Schema({
name: String,
createdAt: { type: Date, expires: '2m', default: Date.now }
});
Mongoose はバックグラウンドでインデックスを作成しexpireAfterSeconds
、この場合は120
秒 ( 2mで指定) に自動設定します。
TTL プロセスは 60 秒ごとに実行されるため、常に完全に時間通りに実行されるわけではないことに注意してください。