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.