$dateToParts(集計)
定義
$dateToParts
バージョン 3.6 の新機能。
指定された BSON Date 値の構成部分を個々のプロパティとして返します。 返されるプロパティは、
year
、month
、day
、hour
、minute
、second
、millisecond
です。iso8601
プロパティをtrue
に設定すると、 ISO 週日 を表す部分が返されます ください。これにより、プロパティがisoWeekYear
、isoWeek
、isoDayOfWeek
、hour
、minute
、second
、millisecond
であるドキュメントが返されます。$dateToParts
式の構文は次のとおりです。{ $dateToParts: { 'date' : <dateExpression>, 'timezone' : <timezone>, 'iso8601' : <boolean> } } $dateToParts
は、次のフィールドを持つドキュメントを取得します。フィールド必須/オプション説明date
必須部分を返す入力日付。<dateExpression>
は、 Date 、 Timestamp 、または に変換される任意のObjectId 式 であり、式の詳細については、「式 」を参照してください。timezone
任意日付の形式に使用するタイムゾーン。 デフォルトでは、
$dateToParts
は UTC を使用します。<timezone>
は、値が次のいずれかの として評価される任意の 式string にすることができます。Olson タイムゾーン識別子 、たとえば
"Europe/London"
や など、"America/New_York"
または次の形式の UTC オフセット:
+/-[hh]:[mm]
、例:"+04:45"
、または+/-[hh][mm]
、例:"-0530"
、または+/-[hh]
, e.g."+03"
.
式の詳細については、「式 」を参照してください。
iso8601
任意true
に設定すると、出力ドキュメントが変更され、 ISO 週日付フィールドが使用されます。 デフォルトはfalse
です。
動作
<timezone>
フィールドで Olson タイムゾーン識別子を使用する際、指定されたタイムゾーンに該当する場合、MongoDB は DST オフセットを適用します。
たとえば、次のドキュメントを含む sales
コレクションを考えます。
{ "_id" : 1, "item" : "abc", "price" : 20, "quantity" : 5, "date" : ISODate("2017-05-20T10:24:51.303Z") }
次の集計は、MongoDB がタイムゾーン識別子の DST オフセットを取り扱う方法を示しています。この例では、$hour
演算子と $minute
演算子を使用して、date
フィールドの対応する部分を返します。
db.sales.aggregate([ { $project: { "nycHour": { $hour: { date: "$date", timezone: "-05:00" } }, "nycMinute": { $minute: { date: "$date", timezone: "-05:00" } }, "gmtHour": { $hour: { date: "$date", timezone: "GMT" } }, "gmtMinute": { $minute: { date: "$date", timezone: "GMT" } }, "nycOlsonHour": { $hour: { date: "$date", timezone: "America/New_York" } }, "nycOlsonMinute": { $minute: { date: "$date", timezone: "America/New_York" } } } }])
この操作では、次の結果を返します。
{ "_id": 1, "nycHour" : 5, "nycMinute" : 24, "gmtHour" : 10, "gmtMinute" : 24, "nycOlsonHour" : 6, "nycOlsonMinute" : 24 }
例
次の文書を持つsales
コレクションを考えます。
{ "_id" : 2, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2017-01-01T01:29:09.123Z") }
次の集計では、 $dateToParts
を使用して、 date
フィールドの構成部分を含むドキュメントを返します。
db.sales.aggregate([ { $project: { date: { $dateToParts: { date: "$date" } }, date_iso: { $dateToParts: { date: "$date", iso8601: true } }, date_timezone: { $dateToParts: { date: "$date", timezone: "America/New_York" } } } }])
この操作では、次の結果を返します。
{ "_id" : 2, "date" : { "year" : 2017, "month" : 1, "day" : 1, "hour" : 1, "minute" : 29, "second" : 9, "millisecond" : 123 }, "date_iso" : { "isoWeekYear" : 2016, "isoWeek" : 52, "isoDayOfWeek" : 7, "hour" : 1, "minute" : 29, "second" : 9, "millisecond" : 123 }, "date_timezone" : { "year" : 2016, "month" : 12, "day" : 31, "hour" : 20, "minute" : 29, "second" : 9, "millisecond" : 123 } }