Ich weiß, dass dies eine alte Frage ist, aber die akzeptierte Antwort erklärt den Unterschied nicht richtig. Es erklärt den Unterschied im Verhalten, aber nicht, wie es tatsächlich funktioniert.
In Ihrem mongoose
Schema, Ihr default
kann entweder ein Wert des angegebenen Typs oder eine Funktion sein, die einen Wert des angegebenen Typs zurückgibt. Date.now
ist eine eingebaute Javascript-Funktion, die den aktuellen Unix-Zeitstempel als Zahl zurückgibt.
Wenn Sie Date.now
übergeben als default
in Ihrem mongoose
Schema übergeben Sie die Funktion und mongoose
ruft diese Funktion jedes Mal auf, wenn ein Dokument einen Standardwert für diese Eigenschaft benötigt. Daraus ergibt sich die aktuelle Uhrzeit, zum Zeitpunkt des Dokuments Schöpfung , die als Wert für diese Eigenschaft gespeichert wird.
Wenn Sie jedoch Date.now()
übergeben Stattdessen übergeben Sie den von Date.now()
zurückgegebenen Wert eher die Funktion. Dadurch erhalten Ihre Dokumente die aktuelle Zeit, zum Zeitpunkt des Schemas Schöpfung , als Standardwert für diese Eigenschaft. Das bedeutet, dass Ihre Dokumente die Zeit der letzten Bereitstellung speichern, was wahrscheinlich nicht das ist, was Sie wollen.
Wenn Date.now
war eine Konstante "beim Erstellen eines neuen Datensatzes durch Mongoose durch die aktuelle Datumszeit ersetzt", wie in der akzeptierten Antwort vorgeschlagen, dann sollte Folgendes logisch funktionieren:
validUntil: {
type: Date,
default: Date.now + 3*60*60*1000 // 3 hours from now
}
Aber Date.now
wird nicht auf magische Weise durch mongoose
ersetzt , es ist eine Funktion und Sie können einer Funktion keine Zahl hinzufügen. Sie können jedoch eine Funktion innerhalb Ihrer eigenen Funktion aufrufen und dem Ergebnis eine Zahl hinzufügen, wie unten gezeigt:
validUntil: {
type: Date,
default: () => Date.now() + 3*60*60*1000 // 3 hours from now
}
Da aus der akzeptierten Antwort nicht klar hervorging, dass Date.now
ist eine Funktion und kein mongoose
ständig, das wollte ich klarstellen. Der Unterschied zwischen Date.now()
und Date.now
ist das Date.now()
ruft die Funktion auf und gibt das Ergebnis zurück, während Date.now
gibt die Funktion selbst zurück.