Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/
Manual de base de datos
/

Configurar la eliminación automática para las colecciones de series de tiempo (TTL)

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.

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

Para cambiar el valor del parámetro expireAfterSeconds, ejecute el siguiente comando collMod:

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

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: { ... }
},
...
},
...
]
}
}

Para desactivar la eliminación automática, utiliza el comando collMod para configurar expireAfterSeconds en off:

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

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

"seconds" (por defecto)

una hora

"minutes"

24 horas

"hours"

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.

Volver

Listar las colecciones de series temporales en una base de datos

En esta página