sql >> Databasteknik >  >> NoSQL >> MongoDB

Vad är skillnaden mellan Date.now() och Date.now i mongoose?

Jag vet att detta är en gammal fråga, men det accepterade svaret förklarar inte skillnaden ordentligt. Det förklarar skillnaden i beteende, men inte hur det faktiskt fungerar.

I din mongoose schema, din default kan antingen vara ett värde av den angivna typen eller en funktion som returnerar ett värde av den angivna typen. Date.now är en inbyggd Javascript-funktion som returnerar den aktuella unix-tidsstämpeln som ett nummer.

Om du skickar Date.now som default i din mongoose schema, skickar du funktionen och mongoose anropar den funktionen varje gång ett dokument behöver ett standardvärde för den egenskapen. Detta resulterar i den aktuella tiden, vid tidpunkten för dokumentet skapande , som lagras som värdet för den egenskapen.

Men om du skickar Date.now() istället skickar du värdet som returneras av Date.now() snarare än funktionen. Genom att göra detta kommer dina dokument att få aktuell tid, vid tidpunkten för schema skapande , som standardvärde för den egenskapen. Det betyder att dina dokument kommer att lagra tidpunkten för den senaste distributionen, vilket förmodligen inte är vad du vill ha.

Om Date.now var en konstant "ersatt av Mongoose med nuvarande datum och tid när en ny post skapades", som föreslås av det accepterade svaret, då borde följande logiskt fungera:

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

Men Date.now är inte magiskt ersatt av mongoose , det är en funktion och du kan inte lägga till ett nummer till en funktion. Du kan dock anropa en funktion i din egen funktion och lägga till ett nummer till resultatet, som visas nedan:

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

Eftersom det inte framgick av det godkända svaret att Date.now är en funktion och inte en mongoose konstant, jag ville förtydliga det. Skillnaden mellan Date.now() och Date.now är det Date.now() anropar funktionen och returnerar resultatet, medan Date.now returnerar själva funktionen.



  1. Hur tillhandahåller du konfiguration till MongoDB med Meteor?

  2. Mongoose-fel:Kan inte uppdatera __v och __v samtidigt

  3. Mongoose/Mongodb:Exkludera fält från ifyllda frågedata

  4. Är Mongodb ObjectID unikt mellan dokument?