Знам, че това е стар въпрос, но приетият отговор не обяснява правилно разликата. Обяснява разликата в поведението, но не и как всъщност работи.
Във вашия 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 връща самата функция.