Wiem, że to stare pytanie, ale przyjęta odpowiedź nie wyjaśnia właściwie różnicy. Wyjaśnia różnicę w zachowaniu, ale nie wyjaśnia, jak faktycznie działa.
W twojej mongoose
schemat, Twój default
może być wartością określonego typu lub funkcją zwracającą wartość określonego typu. Date.now
jest wbudowaną funkcją JavaScript, która zwraca bieżący uniksowy znacznik czasu jako liczbę.
Jeśli zdasz Date.now
jako default
w twojej mongoose
schemat, przekazujesz funkcję i mongoose
wywoła tę funkcję za każdym razem, gdy dokument będzie wymagał wartości domyślnej dla tej właściwości. Daje to wynik bieżący, w czasie dokumentu tworzenie , przechowywane jako wartość tej właściwości.
Jeśli jednak zdasz Date.now()
zamiast tego przekazujesz wartość zwróconą przez Date.now()
zamiast funkcji. W ten sposób Twoje dokumenty otrzymają aktualny czas w czasie schematu tworzenie , jako wartość domyślną dla tej właściwości. Oznacza to, że Twoje dokumenty będą przechowywać czas ostatniego wdrożenia, co prawdopodobnie nie jest tym, czego chcesz.
Jeśli Date.now
była stała „zastąpiona przez Mongoose bieżącą datą i godziną podczas tworzenia nowego rekordu”, jak sugeruje przyjęta odpowiedź, wtedy logicznie powinno działać:
validUntil: {
type: Date,
default: Date.now + 3*60*60*1000 // 3 hours from now
}
Ale Date.now
nie jest magicznie zastąpiony przez mongoose
, jest to funkcja i nie można dodać liczby do funkcji. Możesz jednak wywołać funkcję wewnątrz własnej funkcji i dodać liczbę do wyniku, jak pokazano poniżej:
validUntil: {
type: Date,
default: () => Date.now() + 3*60*60*1000 // 3 hours from now
}
Ponieważ z przyjętej odpowiedzi nie wynikało jasno, że Date.now
jest funkcją, a nie mongoose
stały, chciałem to wyjaśnić. Różnica między Date.now()
i Date.now
czy to Date.now()
wywołuje funkcję i zwraca wynik, podczas gdy Date.now
zwraca samą funkcję.