sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cuál es la diferencia entre Date.now() y Date.now en mongoose?

Sé que esta es una pregunta antigua, pero la respuesta aceptada no explica la diferencia correctamente. Explica la diferencia en el comportamiento, pero no cómo funciona realmente.

En tu mongoose esquema, su default puede ser un valor del tipo especificado o una función que devuelve un valor del tipo especificado. Date.now es una función Javascript incorporada que devuelve la marca de tiempo actual de Unix como un número.

Si pasa Date.now como default en tu mongoose esquema, está pasando la función y mongoose llamará a esa función cada vez que un documento necesite un valor predeterminado para esa propiedad. Esto da como resultado la hora actual, en el momento del documento creación , siendo almacenado como el valor de esa propiedad.

Sin embargo, si pasa Date.now() en su lugar, está pasando el valor devuelto por Date.now() en lugar de la función. Al hacer esto, sus documentos obtendrán la hora actual, en el momento del esquema creación , como valor predeterminado para esa propiedad. Esto significa que sus documentos almacenarán la hora de la última implementación, que probablemente no sea lo que desea.

Si Date.now fue una constante "reemplazada por Mongoose con la fecha y hora actual al crear un nuevo registro", como sugiere la respuesta aceptada, entonces lo siguiente debería funcionar lógicamente:

validUntil: {
  type: Date,
  default: Date.now + 3*60*60*1000 // 3 hours from now
}

Pero Date.now no se reemplaza mágicamente por mongoose , es una función y no puede agregar un número a una función. Sin embargo, puede llamar a una función dentro de su propia función y agregar un número al resultado, como se muestra a continuación:

validUntil: {
  type: Date,
  default: () => Date.now() + 3*60*60*1000 // 3 hours from now
}

Como no estaba claro en la respuesta aceptada que Date.now es una función y no una mongoose constante, quería aclarar eso. La diferencia entre Date.now() y Date.now es eso Date.now() llama a la función y devuelve el resultado, mientras que Date.now devuelve la función misma.