Vím, že je to stará otázka, ale přijatá odpověď nevysvětluje správně rozdíl. Vysvětluje rozdíl v chování, ale ne jak to ve skutečnosti funguje.
Ve vašem mongoose
schéma, vaše default
může být buď hodnota zadaného typu, nebo funkce, která vrací hodnotu zadaného typu. Date.now
je vestavěná funkce Javascript, která vrací aktuální unixové časové razítko jako číslo.
Pokud předáte Date.now
jako default
ve vaší mongoose
schéma, předáváte funkci a mongoose
zavolá tuto funkci pokaždé, když dokument potřebuje výchozí hodnotu pro tuto vlastnost. Výsledkem je aktuální čas v době dokumentu tvoření , která je uložena jako hodnota pro tuto vlastnost.
Pokud však předáte Date.now()
místo toho předáváte hodnotu vrácenou Date.now()
spíše než funkce. Vaše dokumenty tak získají aktuální čas v době schéma tvoření , jako výchozí hodnotu pro tuto vlastnost. To znamená, že vaše dokumenty budou uchovávat čas posledního nasazení, což pravděpodobně není to, co chcete.
Pokud Date.now
byla konstanta "nahrazena Mongoose aktuálním datem při vytváření nového záznamu", jak navrhuje přijatá odpověď, pak by mělo logicky fungovat následující:
validUntil: {
type: Date,
default: Date.now + 3*60*60*1000 // 3 hours from now
}
Ale Date.now
není magicky nahrazeno mongoose
, je to funkce a k funkci nelze přidat číslo. Můžete však zavolat funkci uvnitř své vlastní funkce a přidat k výsledku číslo, jak je ukázáno níže:
validUntil: {
type: Date,
default: () => Date.now() + 3*60*60*1000 // 3 hours from now
}
Protože z přijaté odpovědi nebylo jasné, že Date.now
je funkce a ne mongoose
konstantní, chtěl jsem to upřesnit. Rozdíl mezi Date.now()
a Date.now
je to Date.now()
zavolá funkci a vrátí výsledek, zatímco Date.now
vrátí samotnou funkci.