Cuando creas un colección de series de tiempo, puedes configurar la eliminación automática de los documentos que tengan más de una determinada cantidad de segundos utilizando el
expireAfterSeconds parameter:
db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "hours" }, expireAfterSeconds: 86400 } )
El umbral de caducidad es el valor del campo timeField más el número de segundos especificado. Considera el siguiente documento en la colección weather24h:
{ "metadata": {"sensorId": 5578, "type": "temperature"}, "timestamp": ISODate("2021-05-18T10:00:00.000Z"), "temp": 12 }
El documento caducaría de la base de datos a las "2021-05-19T10:00:00.000Z". Una vez que todos los documentos de un bucket hayan caducado, la tarea en segundo plano que remueve los buckets caducados remueve el bucket en la siguiente ejecución. Consulta Momento de las operaciones de borrar para obtener más información.
Habilitar la eliminación automática en una colección
Para activar la eliminación automática de documentos de una colección de series de tiempo existente, emitir el siguiente comando collMod:
db.runCommand({ collMod: "weather24h", expireAfterSeconds: 604801 })
Cambie el parámetro expireAfterSeconds
Para cambiar el valor del parámetro expireAfterSeconds, ejecute el siguiente comando collMod:
db.runCommand({ collMod: "weather24h", expireAfterSeconds: 604801 })
Recuperar el valor actual de expireAfterSeconds
Para recuperar el valor actual de expireAfterSeconds, utilice el comando listCollections:
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: { ... } }, ... }, ... ] } }
Desactivar la eliminación automática
Para desactivar la eliminación automática, utiliza el comando collMod para configurar expireAfterSeconds en off:
db.runCommand({ collMod: "weather24h", expireAfterSeconds: "off" })
Comportamiento
Tiempo, borrar Operaciones
MongoDB no garantiza que los datos caducados se borrarán inmediatamente después de su vencimiento. Una vez que todos los documentos en un bucket han expirado, la tarea en segundo plano que elimina buckets expirados elimina el bucket durante la siguiente ejecución. El lapso máximo de tiempo que se permite que una única cubeta cubra está controlado por el granularity de la colección de series de tiempo:
granularity | Lapso de tiempo cubierto |
|---|---|
| una hora |
| 24 horas |
| 30 días |
La tarea en segundo plano que elimina los cubos expirados se ejecuta cada 60 segundos. Por lo tanto, los documentos pueden permanecer en una colección durante el período comprendido entre la caducidad del documento, la caducidad de todos los demás documentos en el 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 mongod, los datos expirados pueden existir durante algún tiempo más allá del período de 60 segundos entre ejecuciones de la tarea en segundo plano.