update tutorial query gte mongodb morphia

query - mongodb tutorial



¿Cómo recuperar la última actualización de cada documento en MongoDB? (3)

Necesita capturar la última actualización de tiempo a ti mismo.

Para mi aplicación, mantengo un objeto AuditTrail, que captura AuditEvents. Estos eventos ocurren en cualquier inserción, actualización o eliminación de un objeto (la eliminación es virtual en mi sistema, solo se establece una marca).

Para cada AuditEvent, llevo un registro de la fecha, el usuario autenticado, la acción de db y una descripción completada por la aplicación. Esto se implementa en PersistentObject, por lo que se llama automáticamente para cualquier acción de base de datos de cualquier objeto guardado en Mongo.

Esta implementación tardó muy poco tiempo en implementarse, pero brinda la posibilidad de obtener la última actualización y también cualquier otra información que pueda necesitar para la seguridad y la asistencia al cliente para todo en Mongo.

Me gustaría saber si hay una forma de obtener la última actualización / modificación del tiempo de los datos (es decir, documentos) en una colección en MongoDB. Más claramente, quiero hacer una consulta para recuperar todos los documentos actualizados después de un tiempo determinado.

¿Hay alguna forma posible de recuperar esta última marca de tiempo modificada en MongoDB?

Nota: para los documentos recién creados, sé que podemos recuperar la marca de tiempo del objectId, pero para una actualización, el ID será el mismo. ¿Guarda MongoDB la última actualización de cada documento en cualquier lugar?

Estoy usando morphia como el controlador java, así que si hay alguna forma posible de morphia, hágamelo saber.


No, MongoDB por sí mismo no almacena las marcas de tiempo de creación o actualización. Debe hacerlo usted mismo (y, como ya descubrió, si usa un ID de objeto, entonces ya obtiene la fecha de creación).


Puede usar una entidad de seguimiento de auditoría como se menciona en @ user1530669 (estoy llamando a la mía delta: el código ya está disponible en algún lugar de ).

O simplemente puede guardar el último cambio de tiempo. Por lo general, estoy usando una entidad base para configurarlo y todas las demás entidades lo extienden (para su requisito específico, probablemente pueda eliminar la fecha de creationDate ya que el lastChange es suficiente para usted):

protected Date creationDate; protected Date lastChange; // Getters and setters or final setters which don''t do anything, // if you only want to allow the entity to update the values @PrePersist public void prePersist() { creationDate = (creationDate == null) ? new Date() : creationDate; lastChange = (lastChange == null) ? creationDate : new Date(); }

Y en sus consultas, puede agregar un filtro para que el atributo lastChange sea ​​más reciente que su límite de recuperación.