Saya tahu ini adalah pertanyaan lama, tetapi jawaban yang diterima tidak menjelaskan perbedaannya dengan benar. Ini menjelaskan perbedaan perilaku, tetapi bukan cara kerjanya.
Di mongoose
skema, default
. Anda dapat berupa nilai dari tipe yang ditentukan atau fungsi yang mengembalikan nilai dari tipe yang ditentukan. Date.now
adalah fungsi Javascript bawaan yang mengembalikan cap waktu unix saat ini sebagai angka.
Jika Anda melewati Date.now
sebagai default
di mongoose
skema, Anda melewati fungsi dan mongoose
akan memanggil fungsi itu setiap kali dokumen membutuhkan nilai default untuk properti itu. Ini menghasilkan waktu saat ini, pada waktu dokumen kreasi , disimpan sebagai nilai untuk properti itu.
Namun, jika Anda melewati Date.now()
sebagai gantinya, Anda meneruskan nilai yang dikembalikan oleh Date.now()
ketimbang fungsinya. Dengan melakukan ini, dokumen Anda akan mendapatkan waktu saat ini, pada saat skema kreasi , sebagai nilai default untuk properti itu. Ini berarti bahwa dokumen Anda akan menyimpan waktu penerapan terbaru, yang mungkin bukan yang Anda inginkan.
Jika Date.now
adalah konstanta "digantikan oleh Mongoose dengan datetime saat ini saat membuat catatan baru", seperti yang disarankan oleh jawaban yang diterima, maka yang berikut ini akan berfungsi secara logis:
validUntil: {
type: Date,
default: Date.now + 3*60*60*1000 // 3 hours from now
}
Tapi Date.now
tidak secara ajaib digantikan oleh mongoose
, ini adalah fungsi dan Anda tidak dapat menambahkan angka ke suatu fungsi. Namun, Anda dapat memanggil fungsi di dalam fungsi Anda sendiri dan menambahkan nomor ke hasilnya, seperti yang ditunjukkan di bawah ini:
validUntil: {
type: Date,
default: () => Date.now() + 3*60*60*1000 // 3 hours from now
}
Karena tidak jelas dari jawaban yang diterima bahwa Date.now
adalah fungsi dan bukan mongoose
konstan, saya ingin mengklarifikasi itu. Perbedaan antara Date.now()
dan Date.now
apakah itu Date.now()
memanggil fungsi dan mengembalikan hasilnya, sementara Date.now
mengembalikan fungsi itu sendiri.