MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Quelle est la différence entre Date.now() et Date.now dans mangouste ?

Je sais que c'est une vieille question, mais la réponse acceptée n'explique pas correctement la différence. Cela explique la différence de comportement, mais pas comment cela fonctionne réellement.

Dans ta mongoose schéma, votre default peut être soit une valeur du type spécifié, soit une fonction qui renvoie une valeur du type spécifié. Date.now est une fonction Javascript intégrée qui renvoie l'horodatage Unix actuel sous forme de nombre.

Si vous passez Date.now comme default dans ta mongoose schema, vous passez la fonction et mongoose appellera cette fonction chaque fois qu'un document a besoin d'une valeur par défaut pour cette propriété. Cela se traduit par l'heure actuelle, au moment du document création , étant stocké comme valeur pour cette propriété.

Cependant, si vous passez Date.now() à la place, vous transmettez la valeur renvoyée par Date.now() plutôt que la fonction. En faisant cela, vos documents obtiendront l'heure actuelle, au moment du schéma création , comme valeur par défaut pour cette propriété. Cela signifie que vos documents stockeront l'heure du dernier déploiement, ce qui n'est probablement pas ce que vous souhaitez.

Si Date.now était une constante "remplacée par Mongoose par la date et l'heure actuelles lors de la création d'un nouvel enregistrement", comme suggéré par la réponse acceptée, alors ce qui suit devrait logiquement fonctionner :

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

Mais Date.now n'est pas remplacé par magie par mongoose , c'est une fonction et vous ne pouvez pas ajouter de nombre à une fonction. Cependant, vous pouvez appeler une fonction à l'intérieur de votre propre fonction et ajouter un nombre au résultat, comme illustré ci-dessous :

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

Comme il n'était pas clair d'après la réponse acceptée que Date.now est une fonction et non une mongoose constante, je voulais clarifier cela. La différence entre Date.now() et Date.now est-ce Date.now() appelle la fonction et renvoie le résultat, tandis que Date.now renvoie la fonction elle-même.