私はこれが古い質問であることを知っていますが、受け入れられた答えは違いを適切に説明していません。動作の違いについては説明していますが、実際の動作については説明していません。
あなたのmongoose
で スキーマ、default
指定されたタイプの値、または指定されたタイプの値を返す関数のいずれかです。 Date.now
は、現在のUNIXタイムスタンプを数値として返す組み込みのJavascript関数です。
Date.now
を渡すと default
として mongoose
で スキーマ、関数とmongoose
を渡します ドキュメントがそのプロパティのデフォルト値を必要とするたびに、その関数を呼び出します。これにより、現在の時刻がドキュメントの時点になります。 作成 、そのプロパティの値として保存されます。
ただし、Date.now()
を渡すと 代わりに、Date.now()
によって返される値を渡します。 関数ではなく。これを行うことにより、ドキュメントはスキーマの時点で現在の時刻を取得します。 作成 、そのプロパティのデフォルト値として。これは、ドキュメントに最新の展開の時刻が保存されることを意味しますが、これはおそらくあなたが望むものではありません。
Date.now
の場合 受け入れられた回答で示唆されているように、「新しいレコードを作成するときに現在の日時でマングースに置き換えられた」定数であった場合、次のことが論理的に機能するはずです。
validUntil: {
type: Date,
default: Date.now + 3*60*60*1000 // 3 hours from now
}
ただし、Date.now
魔法のようにmongoose
に置き換えられることはありません 、これは関数であり、関数に数値を追加することはできません。ただし、以下に示すように、独自の関数内で関数を呼び出して、結果に数値を追加することができます。
validUntil: {
type: Date,
default: () => Date.now() + 3*60*60*1000 // 3 hours from now
}
受け入れられた回答から、Date.now
が明確ではなかったため 関数であり、mongoose
ではありません 一定、私はそれを明確にしたかった。 Date.now()
の違い およびDate.now
そのDate.now()
Date.now
が関数を呼び出し、結果を返します。 関数自体を返します。