47

以下は、コレクションの有効期限 (TTL) を設定するために mongo ターミナル経由で使用できるコマンドです。

db.log.events.ensureIndex( { "status": 1 }, { expireAfterSeconds: 3600 } )

mongoose を使用して Node.js のコードからこれを行うにはどうすればよいですか?

4

5 に答える 5

115

Mongoose では、フィールドのスキーマ定義のプロパティを使用して、Dateフィールドに TTL インデックスを作成します。expires

// expire docs 3600 seconds after createdAt
new Schema({ createdAt: { type: Date, expires: 3600 }});

ご了承ください:

  • MongoDB のデータ有効期限タスクは 1 分に 1 回実行されるため、有効期限が切れたドキュメントは有効期限を 1 分過ぎても保持される可能性があります。
  • この機能には、MongoDB 2.2 以降が必要です。
  • createdAtドキュメントを作成するときに現在の時刻に設定するか、ここでdefault提案されているようにそれを行うために を追加するかはあなた次第です。
    • { createdAt: { type: Date, expires: 3600, default: Date.now }}
于 2013-01-30T05:56:51.487 に答える
18

有効期限の計算を処理したくない場合や、スキーマの全体的な読みやすさを改善したくない場合は、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 秒ごとに実行されるため、常に完全に時間通りに実行されるわけではないことに注意してください。

于 2018-09-28T22:14:27.897 に答える