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

Was ist der Unterschied zwischen Date.now() und Date.now in Mungo?

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.