2012-04-04 67 views
42

Estoy usando Mongoose, MongoDB y Node.¿Qué SchemaType en Mongoose es mejor para Timestamp?

Me gustaría definir un esquema donde uno de sus campos es una fecha/marca de tiempo.

Me gustaría utilizar este campo para devolver todos los registros que se han actualizado en los últimos 5 minutos.

Debido al hecho de que en la mangosta no puedo usar el método de marca de hora() Entiendo que mi única opción es utilizar el siguiente método de Javascript:

time : { type: Number, default: (new Date()).getTime() } 

No es probablemente la forma más eficiente para consultar una base de datos enorme. Realmente apreciaría si alguien pudiera compartir una forma más eficiente de implementar esto.

¿Hay alguna forma de implementar esto con Mongoose y poder utilizar una marca de tiempo MongoDB?

Respuesta

73

Editar - 20 marzo el año 2016

Mangosta ahora son compatibles con timestamps for collections.

Por favor, considere la respuesta de @bobbyz a continuación. Tal vez esto es lo que estás buscando.

Respuesta original

mangosta es compatible con un tipo Date (que es básicamente una marca de tiempo):

time : { type : Date, default: Date.now } 

Con la definición del campo anterior, toda vez que guarde un documento con un time campo definido, Mangosta se rellene este campo con la hora actual.

Fuente: http://mongoosejs.com/docs/guide.html

+0

Muchas gracias por la respuesta, pero lo que estoy tratando de entender es la mejor manera de consultar para devolver todos los registros que se han actualizado en los últimos 5 minutos. ¿Quiere decir que debería usar: date: {$ gt: ((Math.round ((new Date()). GetTime()/1000)) - 300)} – Liatz

+1

@ user1103897 puede construir un objeto Date directamente y usarlo con $ gt como este: var now = new Date(); var fiveminago = new Fecha (ahora.getTime() - 5 * 60 * 1000); luego consulta con {date: {$ gt: fiveminago}} – mpobrien

+13

Probablemente debería ser 'Date.now' en lugar de' Date.now() '. – elmigranto

0

me gustaría utilizar este campo con el fin de devolver todos los registros que se han actualizado en los últimos 5 minutos.

Esto significa que debe actualizar la fecha a "ahora" cada vez que guarde el objeto. Tal vez encuentres esto útil: Moongoose create-modified plugin

54

La versión actual de la mangosta (v4.x) tiene sellado de tiempo como una opción integrada a un esquema:

var mySchema = new mongoose.Schema({name: String}, {timestamps: true}); 

Esta opción añade createdAt y updatedAt propiedades que tienen marca de tiempo con Date, y que hace todo el trabajo por usted. Cada vez que actualiza el documento, actualiza la propiedad updatedAt. Schema Timestamps Docs.

Cuestiones relacionadas