So che questa è una vecchia domanda, ma la risposta accettata non spiega correttamente la differenza. Spiega la differenza di comportamento, ma non come funziona effettivamente.
Nella tua mongoose
schema, il tuo default
può essere un valore del tipo specificato o una funzione che restituisce un valore del tipo specificato. Date.now
è una funzione Javascript incorporata che restituisce il timestamp unix corrente come numero.
Se superi Date.now
come default
nella tua mongoose
schema, stai passando la funzione e mongoose
chiamerà quella funzione ogni volta che un documento necessita di un valore predefinito per quella proprietà. Ciò si traduce nell'ora corrente, al momento del documento creazione , memorizzato come valore per quella proprietà.
Tuttavia, se passi Date.now()
invece, stai passando il valore restituito da Date.now()
piuttosto che la funzione. In questo modo, i tuoi documenti riceveranno l'ora corrente, al momento dello schema creazione , come valore predefinito per quella proprietà. Ciò significa che i tuoi documenti memorizzeranno l'ora dell'ultima distribuzione, che probabilmente non è quella che desideri.
Se Date.now
era una costante "sostituita da Mongoose con l'attuale datetime durante la creazione di un nuovo record", come suggerito dalla risposta accettata, quindi logicamente dovrebbe funzionare quanto segue:
validUntil: {
type: Date,
default: Date.now + 3*60*60*1000 // 3 hours from now
}
Ma Date.now
non viene magicamente sostituito da mongoose
, è una funzione e non puoi aggiungere un numero a una funzione. Tuttavia, puoi chiamare una funzione all'interno della tua funzione e aggiungere un numero al risultato, come mostrato di seguito:
validUntil: {
type: Date,
default: () => Date.now() + 3*60*60*1000 // 3 hours from now
}
Poiché non era chiaro dalla risposta accettata che Date.now
è una funzione e non una mongoose
costante, volevo chiarirlo. La differenza tra Date.now()
e Date.now
è quello Date.now()
chiama la funzione e restituisce il risultato, mentre Date.now
restituisce la funzione stessa.