sql >> Databáze >  >> NoSQL >> MongoDB

Jaký je rozdíl mezi Date.now() a Date.now v mongoose?

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.



  1. výpočet průměru v Mongoose

  2. Rozdělit řetězec podle znaku v Lua

  3. Jak získat odstraněný dokument v MongoDB?

  4. Odeslání JSON do Flask má za následek chybu 400 Bad Request