sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo formatear datos en Model antes de guardar en Mongoose (ExpressJS)

Aunque no estoy seguro del significado de req.body.starttime , estoy bastante seguro de que está buscando los objetos de esquema pre() función que forma parte de Mongoose Middleware y permite ejecutar la definición de funciones de devolución de llamada antes de guardar los datos. Probablemente algo como esto haga el trabajo deseado:

var RunSchema = new Schema({
  [...]
  starttime: {
    type: Date,
    default: Date.now
  }
});

RunSchema.pre('save', function(next) {
  this.starttime = new Date();
  next();
});

Tenga en cuenta que la función de devolución de llamada para save event se llama cada vez antes de que se cree o actualice un registro. Entonces, esta es, por ejemplo, la forma de establecer explícitamente una marca de tiempo "modificada".

EDITAR:

Gracias a tu comentario, ahora tengo una mejor comprensión de lo que quieres lograr. En caso de que desee modificar los datos antes de que se asignen y conserven en el registro, puede utilizar fácilmente el set propiedad del Esquema:

// defining set within the schema
var RunSchema = new Schema({
  [...]
  starttime: {
    type: Date,
    default: Date.now,
    set: util.getDate
  }
});

Suponiendo que el objeto util está dentro del alcance (requerido o lo que sea) su implementación actual se ajusta a la firma de la propiedad set :

function set(val, schemaType)

El parámetro opcional schemaType le permite inspeccionar las propiedades de su definición de campo de esquema si el proceso de transformación depende de alguna manera.