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

MongoDB $ toDate

    MongoDBでは、$toDate 集計演算子は値を日付に変換します

    $toDate 有効な式を取ります。式を日付に変換できない場合は、エラーが返されます。式がnullの場合 または欠落している場合は、nullを返します 。

    samplesというコレクションがあるとします。 次のドキュメントで:

    {
    	"_id" : ObjectId("60066f1cc8eb4369cf6ad9c9"),
    	"double" : 1613372035500.75,
    	"decimal" : NumberDecimal("1613372035500.75"),
    	"long" : NumberLong("1613372035500"),
    	"string" : "2021-02-15 06:53:55"
    }

    次のクエリを使用して、これらの各値を日付として返すことができます。

    db.samples.aggregate(
      [
        {
          $project:
            {
              _id: 0,
              "ObjectId": { $toDate: "$_id" },
              "double": { $toDate: "$double" },
              "decimal": { $toDate: "$decimal" },
              "long": { $toDate: "$long" },
              "string": { $toDate: "$string" }
            }
        }
      ]
    ).pretty()

    結果:

    {
    	"ObjectId" : ISODate("2021-01-19T05:33:16Z"),
    	"double" : ISODate("2021-02-15T06:53:55.500Z"),
    	"decimal" : ISODate("2021-02-15T06:53:55.500Z"),
    	"long" : ISODate("2021-02-15T06:53:55.500Z"),
    	"string" : ISODate("2021-02-15T06:53:55Z")
    }

    予想どおり、すべてのフィールドは、対応する値が日付値に変換されて返されます。

    ObjectIdフィールドが他のフィールドとは異なる日付を返すことに気付くかもしれません。これは、_idが原因です フィールドの値はドキュメントが作成された日付を反映していますが、他の日付は私が作成した任意の日付です。以下のObjectIdの詳細。

    入力タイプ

    $toDate 演算子は次の入力タイプを受け入れます:

    • ダブル
    • 10進数
    • 長い
    • 文字列(有効な日付文字列である必要があります)
    • ObjectId

    これらの詳細については、以下をご覧ください。

    数値タイプ

    数値タイプ(Double、Decimal、およびLong)を使用する場合、$toDate 値で表されるミリ秒数に対応する日付を返します。 DoubleおよびDecimalの場合、これは切り捨てられた値です。 $toDate 演算子は数値を次のように解釈します:

    • 正の値は、1970年1月1日からのミリ秒数に対応します。
    • 負の値は、1970年1月1日までのミリ秒数に対応します。

    文字列タイプ

    文字列型を使用する場合、文字列は有効な日付文字列である必要があります。例:

    • "2021-02-15"
    • "15 February 2021"
    • "2021-02-15 06:53:55"
    • "2021-02-15 06:53:55+1100"

    不完全な日付や"Monday"などの無効な値は使用できません 、"March""2020" 、など。

    ObjectId

    ObjectId値は、以下で構成される12バイトの16進値です。

    • ObjectIdの作成を表す4バイトのタイムスタンプ値で、Unixエポックからの秒数で測定されます。
    • 5バイトはランダムな値です
    • ランダムな値に初期化された3バイトのインクリメントカウンター。

    $toDate 演算子はタイムスタンプ部分を日付として返します。


    1. MongoDBマルチキーインデックスとインデックス交差境界

    2. ObjectIdへのMongoDB集約プロジェクト文字列

    3. メモリが不足した場合、Redisは何をしますか?

    4. MongoDBでインデックスの方向が重要なのはなぜですか?