Estoy usando Mongoose, MongoDB y Node.
Me gustaría definir un esquema donde uno de sus campos sea una fecha / marca de tiempo.
Me gustaría usar este campo para devolver todos los registros que se han actualizado en los últimos 5 minutos.
Debido al hecho de que en Mongoose no puedo usar el método Timestamp (), entiendo que mi única opción es usar el siguiente método Javascript:
time : { type: Number, default: (new Date()).getTime() }
Probablemente no sea la forma más eficiente de consultar una base de datos enorme. Realmente agradecería si alguien pudiera compartir una forma más eficiente de implementar esto.
¿Hay alguna forma de implementar esto con Mongoose y poder usar una marca de tiempo de MongoDB?
Date.now
lugar deDate.now()
.Date.now
porqueDate.now
es una función que se ejecutará al crear objetos.Date.now()
es la fecha en la quemodels.js
se analizó. Es decir, si usasDate.now()
todos tus objetos tendrán la misma fecha, y esa será la fecha en quemodels.js
se analizó.La versión actual de Mongoose (v4.x) tiene marcas de tiempo como una opción incorporada a un esquema:
var mySchema = new mongoose.Schema( {name: String}, {timestamps: true} );
Esta opción añade
createdAt
yupdatedAt
propiedades que son sellos de tiempo con unaDate
, y que hace todo el trabajo por usted. Cada vez que actualiza el documento, actualiza laupdatedAt
propiedad. Documentos de marcas de tiempo de esquema.fuente
timestamps: true
lugar de anular los nombres usandotimestamps: {...}
.timestamps: true
, por lo que es posible que se necesiten algunas consideraciones adicionales en el futuro. (¿Quizás lo están desaprobando? Tienes razón, los documentos no son muy claros para esta opción)En caso de que desee nombres personalizados para su createdAt y updatedAt
const mongoose = require('mongoose'); const { Schema } = mongoose; const schemaOptions = { timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }, }; const mySchema = new Schema({ name: String }, schemaOptions);
fuente
var ItemSchema = new Schema({ name : { type: String } }); ItemSchema.set('timestamps', true); // this will add createdAt and updatedAt timestamps
Documentos: https://mongoosejs.com/docs/guide.html#timestamps
fuente
{ timestamps: true }
segundo argumentonew Schema({}, {<here>})
.Esto significa que debe actualizar la fecha a "ahora" cada vez que guarde el objeto. Tal vez encuentre esto útil: Complemento modificado para crear Moongoose
fuente
Primero :
npm install mongoose-timestamp
Próximo:
let Timestamps = require('mongoose-timestamp')
Próximo:
let MySchema = new Schema
Próximo:
MySchema.plugin(Timestamps)
Siguiente :
const Collection = mongoose.model('Collection',MySchema)
Entonces puede usar el
Collection.createdAt
o enCollection.updatedAt
cualquier lugar que desee.Creado en: Fecha de la semana Mes Fecha Año 00:00:00 GMT
El tiempo está en este formato.
fuente