Cuando creas un recopilación de series de tiempo, puede configurar la eliminación automática de documentos con más de una cantidad específica de segundos mediante el uso de
expireAfterSeconds parámetro:
db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "hours" }, expireAfterSeconds: 86400 } )
El umbral de expiración es el valor del campo timeField más el número de segundos especificado. Considere el siguiente documento de la colección weather24h:
{ "metadata": {"sensorId": 5578, "type": "temperature"}, "timestamp": ISODate("2021-05-18T10:00:00.000Z"), "temp": 12 }
El documento expiraría de la base de datos a las "2021-05-19T10:00:00.000Z". Una vez que todos los documentos de un depósito hayan expirado, la tarea en segundo plano que elimina los depósitos expirados eliminará el depósito durante la siguiente ejecución. Ver
Momento de las operaciones de eliminación para obtener más información.
Habilitar la eliminación automática en una colección
Para habilitar la eliminación automática de documentos de una colección de series de tiempo existente, emita el siguiente collMod comando:
db.runCommand({ collMod: "weather24h", expireAfterSeconds: 604801 })
Cambiar el expireAfterSeconds parámetro
Para cambiar el expireAfterSeconds valor del parámetro, emita el siguiente collMod comando:
db.runCommand({ collMod: "weather24h", expireAfterSeconds: 604801 })
Recuperar el valor actual de expireAfterSeconds
Para recuperar el valor actual de,expireAfterSeconds utilice el listCollections comando:
db.runCommand( { listCollections: 1 } )
El documento de resultado contiene un documento para la colección de series de tiempo que contiene el campo options.expireAfterSeconds.
{ cursor: { id: <number>, ns: 'test.$cmd.listCollections', firstBatch: [ { name: <string>, type: 'timeseries', options: { expireAfterSeconds: <number>, timeseries: { ... } }, ... }, ... ] } }
Deshabilitar la eliminación automática
Para deshabilitar la eliminación automática, use el comando collMod para expireAfterSeconds establecer off en:
db.runCommand({ collMod: "weather24h", expireAfterSeconds: "off" })
Comportamiento
Momento de las operaciones de eliminación
MongoDB no garantiza que los datos caducados se eliminen inmediatamente después de su vencimiento. Una vez caducados todos los documentos de un bucket, la tarea en segundo plano que elimina los buckets caducados lo hace en la siguiente ejecución. El tiempo máximo que un solo bucket puede cubrir se controla mediante el granularity de la colección de series temporales:
granularity | Lapso de tiempo cubierto |
|---|---|
| una hora |
| 24 horas |
| 30 días |
La tarea en segundo plano que elimina los buckets caducados se ejecuta cada 60 segundos. Por lo tanto, los documentos pueden permanecer en una colección durante el periodo comprendido entre la caducidad del documento, la caducidad de todos los demás documentos del bucket y la ejecución de la tarea en segundo plano.
Debido a que la duración de la operación de eliminación depende de la carga de trabajo de su instancia de mongod, los datos vencidos pueden existir durante algún tiempo más allá del período de 60 segundos entre ejecuciones de la tarea en segundo plano.