Ik weet dat dit een oude vraag is, maar het geaccepteerde antwoord verklaart het verschil niet goed. Het verklaart het verschil in gedrag, maar niet hoe het echt werkt.
In je mongoose
schema, uw default
kan een waarde van het opgegeven type zijn of een functie die een waarde van het opgegeven type retourneert. Date.now
is een ingebouwde Javascript-functie die de huidige Unix-tijdstempel als een getal retourneert.
Als u door Date.now
komt als de default
in je mongoose
schema, je geeft de functie door en mongoose
zal die functie aanroepen elke keer dat een document een standaardwaarde voor die eigenschap nodig heeft. Dit resulteert in de huidige tijd, op het moment van document creatie , wordt opgeslagen als de waarde voor die eigenschap.
Als u echter Date.now()
. doorgeeft in plaats daarvan geef je de waarde door die wordt geretourneerd door Date.now()
in plaats van de functie. Door dit te doen, krijgen uw documenten de huidige tijd, op het moment van schema creatie , als de standaardwaarde voor die eigenschap. Dit betekent dat uw documenten de tijd van de laatste implementatie zullen opslaan, wat waarschijnlijk niet is wat u wilt.
Als Date.now
een constante was "vervangen door Mongoose met de huidige datumtijd bij het maken van een nieuw record", zoals gesuggereerd door het geaccepteerde antwoord, dan zou het volgende logisch moeten werken:
validUntil: {
type: Date,
default: Date.now + 3*60*60*1000 // 3 hours from now
}
Maar Date.now
wordt niet op magische wijze vervangen door mongoose
, het is een functie en je kunt geen getal aan een functie toevoegen. U kunt echter een functie binnen uw eigen functie aanroepen en een getal aan het resultaat toevoegen, zoals hieronder wordt aangetoond:
validUntil: {
type: Date,
default: () => Date.now() + 3*60*60*1000 // 3 hours from now
}
Omdat uit het geaccepteerde antwoord niet duidelijk was dat Date.now
is een functie en geen mongoose
constant, dat wilde ik even verduidelijken. Het verschil tussen Date.now()
en Date.now
is dat Date.now()
roept de functie aan en retourneert het resultaat, terwijl Date.now
geeft de functie zelf terug.