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
演算子はタイムスタンプ部分を日付として返します。