AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

時系列コレクション(TTL)の自動削除の設定

時系列コレクションを作成するときに、expireAfterSeconds パラメータを使用して、指定した秒数より古いドキュメントを自動的に削除するように設定できます。

db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "hours" }, expireAfterSeconds: 86400 })

有効期限のしきい値は、timeField フィールドの値に、指定された秒数を加えた値になります。weather24h コレクション内の次のドキュメントを考えてみましょう。

{ "metadata": {"sensorId": 5578, "type": "temperature"}, "timestamp": ISODate("2021-05-18T10:00:00.000Z"), "temp": 12}

このドキュメントは "2021-05-19T10:00:00.000Z" に、データベースで期限切れになります。バケット内のすべてのドキュメントの有効期限が切れると、期限切れのバケットを削除するバックグラウンドタスクが、次回の実行時にバケットを削除します。詳細については、「削除操作のタイミング」を参照してください。

既存の時系列コレクションのドキュメントの自動削除を有効にするには、次の collMod コマンドを発行します。

db.runCommand({ collMod: "weather24h", expireAfterSeconds: 604801})

expireAfterSeconds パラメーターの値を変更するには、次の collMod コマンドを発行します。

db.runCommand({ collMod: "weather24h", expireAfterSeconds: 604801})

expireAfterSeconds の現在の値を取得するには、listCollections コマンドを使用します。

db.runCommand( { listCollections: 1 } )

結果ドキュメントには、options.expireAfterSeconds フィールドを含む時系列コレクションのドキュメントが含まれます。

{ cursor: { id: <number>, ns: 'test.$cmd.listCollections', firstBatch: [ { name: <string>, type: 'timeseries', options: { expireAfterSeconds: <number>, timeseries: { ... } }, ... }, ... ] } }

自動削除を無効にするには、collMod コマンドを使用して expireAfterSeconds を off に設定します。

db.runCommand({ collMod: "weather24h", expireAfterSeconds: "off"})

MongoDB は、有効期限が切れたデータが有効期限後すぐに削除されることを保証しません。バケット内のすべてのドキュメントの有効期限が切れると、期限切れのバケットを削除するバックグラウンド タスクが、次回の実行時にバケットを削除します。1 つのバケットがカバーすることを許可される時間の最大スパンは、時系列コレクションの granularity によって制御されます。

granularity
カバーする時間

"seconds" (デフォルト)

1 時間

"minutes"

24 時間

"hours"

30 日間

期限切れのバケットを削除するバックグラウンド タスクは 60 秒ごとに実行されます。そのため、ドキュメントの有効期限が切れてから、バケット内の他のすべてのドキュメントの有効期限が切れ、タスクが実行中になるまでの間、ドキュメントがコレクションに残ることがあります。

削除操作の期間は mongod インスタンスのワークロードによって異なるため、バックグラウンド タスクの実行間隔が 60 秒を超えると、有効期限切れのデータがしばらく存在する可能性があります。