MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So formatieren Sie Daten in Model vor dem Speichern in Mongoose (ExpressJS)

Während ich mir über die Bedeutung von req.body.starttime nicht sicher bin , ich bin mir ziemlich sicher, dass Sie nach den Schema-Objekten pre() suchen Funktion, die Teil der Mongoose Middleware ist und die Definition von Callback-Funktionen erlaubt, die ausgeführt werden, bevor Daten gespeichert werden. Wahrscheinlich macht so etwas den gewünschten Job:

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

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

Beachten Sie, dass die Callback-Funktion für das save event wird jedes Mal aufgerufen, bevor ein Datensatz erstellt oder aktualisiert wird. So kann beispielsweise explizit ein "modifizierter" Zeitstempel gesetzt werden.

BEARBEITEN:

Dank Ihres Kommentars habe ich jetzt besser verstanden, was Sie erreichen möchten. Falls Sie Daten ändern möchten, bevor sie dem Datensatz zugewiesen und gespeichert werden, können Sie einfach das set verwenden Eigenschaft des Schemas:

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

Angenommen, das Objekt util innerhalb des Geltungsbereichs (erforderlich oder was auch immer) liegt, passt Ihre aktuelle Implementierung zur Signatur für die Eigenschaft set :

function set(val, schemaType)

Der optionale Parameter schemaType ermöglicht es Ihnen, die Eigenschaften Ihrer Schemafelddefinition zu überprüfen, wenn der Transformationsprozess in irgendeiner Weise davon abhängt.