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

Qual è la differenza tra Date.now() e Date.now in mangusta?

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.