MongoDBで期限切れデータを自動削除する方法
MongoDBでは、TTL(Time to Live)インデックスを使用して、期限切れのデータが自動的に削除できます。TTLインデックスは、データの有効期限を自動的に設定できるタイプのインデックスです。
TTL インデックスにより期限切れのデータを自動削除するには以下の手順を実施する必要があります。
- db.コレクション.インデックス.作成()
- collectionName
- フィールド名
db.collectionName.createIndex({ "fieldName": 1 }, { expireAfterSeconds: 3600 })
- ドキュメントを挿入する際には、有効期限フィールドに適切な時間値を設定する必要があります。例えば、Date() 関数を使用して現在時刻を取得し、ドキュメントを挿入する際に有効期限フィールドに現在時刻に有効期限を加えた値を設定することができます。
- MongoDBは有効期限が来たドキュメントを自動的に削除します。これによりTTLを削除するにはdb.collection.dropIndex()メソッドを定期的に利用し、新しいTTLインデックスを再作成することで、有効期限が過ぎたデータを削除します。TTLインデックスを削除しても既存のドキュメントには影響を与えませんが、有効期限が過ぎたデータの自動削除が行われなくなるため、手動で削除する必要があります。
TTLインデックスはバックグラウンドスレッドが空いたときに削除処理が行われるので、期限切れデータはリアルタイムには削除されないことに注意。また、日付型のフィールドに使用でき、TTLインデックスは1つしか設定できない。
MongoDBバージョン4.2以降、TTLインデックスの挙動が変更され、時間ベースのイベントとなり、バックグラウンドの「スレッド」で期限切れデータをバッチで削除するように変わります。それ以前のバージョンでは、TTLインデックスはコレクションを定期的にスキャンするという形式で削除処理を実施していました。