sql >> データベース >  >> NoSQL >> MongoDB

マングースのDate.now()とDate.nowの違いは何ですか?

    私はこれが古い質問であることを知っていますが、受け入れられた答えは違いを適切に説明していません。動作の違いについては説明していますが、実際の動作については説明していません。

    あなたの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が関数を呼び出し、結果を返します。 関数自体を返します。



    1. NodeJSとMongooseを使用してデータベースの変更を監視するMongoDBwatch()

    2. 仮想属性によるMongoidクエリDB

    3. MongoDBの更新:既存のフィールドに基づいて新しいフィールドを生成するか、その場で更新します

    4. マックスとMongodbでのグループ化