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 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 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 })
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 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 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 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.