sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvad er forskellen mellem Date.now() og Date.now i mongoose?

Jeg ved, at dette er et gammelt spørgsmål, men det accepterede svar forklarer ikke forskellen ordentligt. Det forklarer forskellen i adfærd, men ikke hvordan det rent faktisk fungerer.

I din mongoose skema, din default kan enten være en værdi af den angivne type eller en funktion, der returnerer en værdi af den angivne type. Date.now er en indbygget Javascript-funktion, der returnerer det aktuelle unix-tidsstempel som et tal.

Hvis du sender Date.now som default i din mongoose skema, sender du funktionen og mongoose kalder den funktion hver gang et dokument har brug for en standardværdi for den pågældende egenskab. Dette resulterer i det aktuelle tidspunkt, på tidspunktet for dokumentet skabelse , bliver gemt som værdien for den pågældende ejendom.

Men hvis du sender Date.now() i stedet sender du værdien returneret af Date.now() frem for funktionen. Ved at gøre dette får dine dokumenter det aktuelle tidspunkt, på tidspunktet for skema skabelse , som standardværdien for den pågældende egenskab. Det betyder, at dine dokumenter gemmer tidspunktet for den seneste implementering, hvilket sandsynligvis ikke er det, du ønsker.

Hvis Date.now var en konstant "erstattet af Mongoose med den aktuelle dato og klokkeslæt ved oprettelse af en ny post", som foreslået af det accepterede svar, så burde følgende logisk fungere:

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

Men Date.now er ikke på magisk vis erstattet af mongoose , det er en funktion, og du kan ikke tilføje et tal til en funktion. Du kan dog kalde en funktion i din egen funktion og tilføje et tal til resultatet, som vist nedenfor:

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

Da det ikke fremgik tydeligt af det accepterede svar, at Date.now er en funktion og ikke en mongoose konstant, det ønskede jeg at præcisere. Forskellen mellem Date.now() og Date.now er det Date.now() kalder funktionen og returnerer resultatet, mens Date.now returnerer selve funktionen.



  1. MongoDB:Update/Upsert vs Insert

  2. Sådan sletter du et dybt indlejret objekt i mongodb

  3. Indsæt en Pandas Dataframe i mongodb ved hjælp af PyMongo

  4. undlader at installere mongoose npm