Знам, че това е стар въпрос, но приетият отговор не обяснява правилно разликата. Обяснява разликата в поведението, но не и как всъщност работи.
Във вашия mongoose
схема, вашата default
може да бъде или стойност от посочения тип, или функция, която връща стойност от посочения тип. Date.now
е вградена функция в Javascript, която връща текущия времеви печат на unix като число.
Ако подадете Date.now
като default
във вашия mongoose
schema, вие предавате функцията и mongoose
ще извиква тази функция всеки път, когато документ се нуждае от стойност по подразбиране за това свойство. Това води до текущия час, към момента на документа създаването , като се съхранява като стойност за това свойство.
Ако обаче подадете Date.now()
вместо това вие предавате стойността, върната от Date.now()
а не функцията. Правейки това, вашите документи ще получат текущото време, по време на схемата създаването , като стойност по подразбиране за това свойство. Това означава, че вашите документи ще съхраняват времето на последното внедряване, което вероятно не е това, което искате.
Ако Date.now
беше константа „заменена от Mongoose с текущата дата и час при създаване на нов запис“, както е предложено от приетия отговор, тогава следното трябва логично да работи:
validUntil: {
type: Date,
default: Date.now + 3*60*60*1000 // 3 hours from now
}
Но Date.now
не е магически заменен от mongoose
, това е функция и не можете да добавите число към функция. Можете обаче да извикате функция вътре в собствената си функция и да добавите число към резултата, както е показано по-долу:
validUntil: {
type: Date,
default: () => Date.now() + 3*60*60*1000 // 3 hours from now
}
Тъй като не стана ясно от приетия отговор, че Date.now
е функция, а не mongoose
постоянно, исках да изясня това. Разликата между Date.now()
и Date.now
е това Date.now()
извиква функцията и връща резултата, докато Date.now
връща самата функция.