sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man formaterar data i Model innan du sparar i Mongoose (ExpressJS)

Även om jag inte är säker på innebörden av req.body.starttime , jag är ganska säker på att du letar efter Schema-objekten pre() funktion som är en del av Mongoose Middleware och gör att definitionen av callback-funktioner kan utföras innan data sparas. Förmodligen gör något sånt här det önskade jobbet:

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

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

Observera att återuppringningsfunktionen för save händelse anropas varje gång innan en post skapas eller uppdateras. Så detta är till exempel sättet att explicit ställa in en "modifierad" tidsstämpel.

EDIT:

Tack vare din kommentar har jag nu fått en bättre förståelse för vad du vill uppnå. Om du vill ändra data innan den tilldelas och behålls till posten, kan du enkelt använda set schemats egendom:

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

Förutsatt att objektet util är inom räckvidd (obligatoriskt eller vad som helst) din nuvarande implementering passar signaturen för egenskapen set :

function set(val, schemaType)

Den valfria parametern schemaType låter dig inspektera egenskaperna för din schemafältsdefinition om omvandlingsprocessen beror på det på något sätt.




  1. Redis Async API:er

  2. Komprimering i node.js

  3. Ta bort inbäddade dokument i en kapslad uppsättning dokument

  4. Returnera den faktiska typen av ett fält i MongoDB