2012-09-10 8 views
8

Tengo una colección de documentos en mongodb, con la propiedad expireAfterSeconds configurada en un índice de tipo de fecha.¿Cuándo caducará un documento mongodb una vez que se haya actualizado?

Por razones de peso, los documentos expiran después de una hora.

Cuando actualizo un documento en esta colección, ¿cuál de los siguientes ocurrirá?

a) El documento caducará una hora después de la hora de creación original, .

b) El documento caducará una hora después de la actualización tiempo.

c) El documento caducará una hora después de la hora indexada variables 's, sea lo que sea.

d) Ninguna de las anteriores

creo que es c, pero no puede encontrar la referencia para confirmarla. ¿Estoy en lo correcto? ¿Dónde está esto documentado?

[edit]: Para aclarar, la situación es que estoy almacenando códigos de restablecimiento de contraseña (que deben caducar) y quiero que los códigos antiguos dejen de funcionar si se solicita un código nuevo. Sin embargo, no es muy relevante, ya que puedo asegurar que siempre se respete el comportamiento que deseo simplemente borrando la transacción anterior. Esta pregunta no es sobre mi problema actual, sino sobre el comportamiento de Mongo.

+0

Estoy probando el comportamiento en este momento. – brice

+1

La duración de las operaciones de eliminación depende de la carga de trabajo de su instancia de mongod que está ejecutando. Podría explicar la situación que está teniendo –

+1

Ver respuesta actualizada. Mi situación actual es bastante irrelevante. Soy consciente de que la eliminación llevará tiempo y el momento exacto dependerá de la carga. – brice

Respuesta

15

La respuesta correcta es c)

La propiedad expireAfterSeconds siempre requiere de un índice en un campo que contiene una fecha BSON, debido a que el contenido de este campo de fecha se utiliza para seleccionar entradas para la eliminación.

Cuando desee una actualización de un documento para restablecer el tiempo de vida, también actualice el campo de fecha indexada a la hora actual.

Cuando desee que una actualización no afecte al TTL, simplemente no actualice la fecha.

Sin embargo, tenga en cuenta que expireAfterSeconds no garantiza la eliminación inmediata del documento. Las eliminaciones se realizan mediante un trabajo en segundo plano que se ejecuta cada minuto. Este trabajo es de baja prioridad y puede ser pospuesto por MongoDB cuando la carga actual es alta. Por lo tanto, cuando es importante para su caso de uso que los tiempos de caducidad se respeten con precisión a la segunda, debe agregar una verificación adicional en el nivel de la aplicación.

Esta característica se documenta aquí: http://docs.mongodb.org/manual/tutorial/expire-data/

+0

Gracias Philipp. Es lo que pensé, aunque no encontré los documentos realmente explícitos en esto. – brice

+0

Gran respuesta: completa, sucinta. – Ross

0

Si no quiere depender de proceso demonio mongo por cumplir la colección, entonces es mejor para crear un campo adicional en CreatedOn recogida y compararla con la fecha y hora actual a decidir si usar ese documento o no.

+0

Esto no está relacionado con la forma en que funciona MongoDB y requiere procesamiento externo (que está fuera del alcance de la pregunta original). –

Cuestiones relacionadas