MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Qual é a diferença entre Date.now() e Date.now no mangusto?


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.