Eu sei que esta é uma pergunta antiga, mas a resposta aceita não explica a diferença corretamente. Ele explica a diferença de comportamento, mas não como ele realmente funciona.
Em seu
mongoose
esquema, seu default
pode ser um valor do tipo especificado ou uma função que retorna um valor do tipo especificado. Date.now
é uma função Javascript integrada que retorna o timestamp unix atual como um número. Se você passar
Date.now
como o default
em seu mongoose
esquema, você está passando a função e mongoose
chamará essa função toda vez que um documento precisar de um valor padrão para essa propriedade. Isso resulta na hora atual, no momento do documento criação , sendo armazenado como o valor dessa propriedade. No entanto, se você passar
Date.now()
em vez disso, você está passando o valor retornado por Date.now()
ao invés da função. Ao fazer isso, seus documentos obterão a hora atual, no momento do esquema criação , como o valor padrão para essa propriedade. Isso significa que seus documentos armazenarão a hora da implantação mais recente, o que provavelmente não é o que você deseja. Se
Date.now
era uma constante "substituída pelo Mongoose pela data e hora atual ao criar um novo registro", conforme sugerido pela resposta aceita, o seguinte deve funcionar logicamente:validUntil: {
type: Date,
default: Date.now + 3*60*60*1000 // 3 hours from now
}
Mas
Date.now
não é magicamente substituído por mongoose
, é uma função e você não pode adicionar um número a uma função. No entanto, você pode chamar uma função dentro de sua própria função e adicionar um número ao resultado, conforme demonstrado abaixo:validUntil: {
type: Date,
default: () => Date.now() + 3*60*60*1000 // 3 hours from now
}
Como não ficou claro na resposta aceita que
Date.now
é uma função e não um mongoose
constante, eu queria esclarecer isso. A diferença entre Date.now()
e Date.now
é que Date.now()
chama a função e retorna o resultado, enquanto Date.now
retorna a própria função.