¿Hay alguna manera de agregar campos created_at y updated_at a un esquema de mangosta, sin tener que pasarlos cada vez que se llama a MyModel ()?
El campo created_at sería una fecha y solo se agregará cuando se cree un documento. El campo updated_at se actualizará con una nueva fecha cada vez que se llame a save () en un documento.
He intentado esto en mi esquema, pero el campo no aparece a menos que lo agregue explícitamente:
var ItemSchema = new Schema({
name : { type: String, required: true, trim: true }
, created_at : { type: Date, required: true, default: Date.now }
});
Respuestas:
A partir de Mongoose 4.0 ahora puede establecer una opción de marcas de tiempo en el Esquema para que Mongoose maneje esto por usted:
Puede cambiar el nombre de los campos utilizados así:
http://mongoosejs.com/docs/guide.html#timestamps
fuente
ACTUALIZACIÓN: (5 años después)
ACTUALIZACIÓN: (4 años después)
Si lo usa
ObjectId
como su_id
campo (que suele ser el caso), entonces todo lo que necesita hacer es:Verifique mi respuesta original a continuación sobre cómo obtener la marca de tiempo creada desde el
_id
campo. Si necesita usar ID de un sistema externo, verifique la respuesta de Roman Rhrn Nesterov.ACTUALIZAR: (2.5 años después)
Ahora puede usar la opción # timestamps con la versión de mangosta> = 4.0.
Si establece marcas de tiempo, asignaciones de mangosta
createdAt
yupdatedAt
campos en su esquema, el tipo asignado esDate
.También puede especificar los nombres de los archivos de marca de tiempo:
RESPUESTA ORIGINAL:
Si está utilizando ObjectId como su campo de identidad, no necesita el
created_at
campo. Los ObjectIds tienen un método llamadogetTimestamp()
.Esto devolverá el siguiente resultado:
Más información aquí ¿Cómo extraigo la fecha de creación de un Object ID de Mongo?
Para agregar
updated_at
archivado, debe usar esto:fuente
Esto es lo que terminé haciendo:
fuente
getTimestamp()
Date.now()
siempre que sea posible en lugar denew Date
su más rápido, ya que es un método estáticoUse la
timestamps
opción integrada para su esquema.Esto agregará automáticamente
createdAt
yupdatedAt
campos a su esquema.http://mongoosejs.com/docs/guide.html#timestamps
fuente
updatedAt
se actualiza en cada nuevo guardado (cuando se cambia el obj)Si usa
update()
ofindOneAndUpdate()
con
{upsert: true}
opciónpuedes usar
$setOnInsert
fuente
_id
campo predeterminado de Mogo , entonces no necesita uncreatedAt
campo. Consulte mi respuesta a continuación para obtener más detalles.Agregue
timestamps
a suSchema
gusto asícreatedAt
yupdatedAt
generará automáticamente para ustedTambién puedes cambiar
createdAt -> created_at
porfuente
Así es como logré haber creado y actualizado.
Dentro de mi esquema, agregué lo creado y actualizado así:
Luego, en mi método de actualización del artículo dentro del controlador del artículo, agregué:
Las secciones en negrita son las partes de interés.
fuente
Documentos: https://mongoosejs.com/docs/guide.html#timestamps
fuente
Puede usar el
timestamp
complemento demongoose-troop
para agregar este comportamiento a cualquier esquema.fuente
Puede usar este complemento muy fácilmente. De los documentos:
Y también establezca el nombre de los campos si lo desea:
fuente
podemos lograr esto usando el complemento de esquema también.
En
helpers/schemaPlugin.js
archivoy en
models/ItemSchema.js
archivo:fuente
En el esquema de su modelo, simplemente agregue las marcas de tiempo de un atributo y asigne un valor verdadero como se muestra:
fuente
Ahora puede usar esto, para que no sea necesario incluir esta opción en cada tabla
fuente
Mi versión de mangosta es 4.10.2
Parece que solo el gancho
findOneAndUpdate
es trabajofuente
Use una función para devolver el valor predeterminado calculado:
fuente
Date.now()
en una función acaba de hacer:...default: Date.now()
default: Date.now()
estaría mal. Si algo es asídefault: Date.now
. De lo contrario, todos sus documentos tendrán la misma marca de tiempo: la hora en que se inició su solicitud;)default: Date.now
estrategia Mucho más limpio.Realmente hago esto en la parte de atrás
Si todo va bien con la actualización:
fuente
Use machinepack-datetime para formatear la fecha y hora.
El paquete de máquina es excelente con una API clara a diferencia del mundo Javascript expreso o general.
fuente
Puede usar middleware y virtuales . Aquí hay un ejemplo para su
updated_at
campo:fuente
name
. Y sí, debería ser persistente.