$dateTrunc(集計)
定義
バージョン 5.0 で追加
日付を切り捨てます。
$dateTrunc
構文:
{ $dateTrunc: { date: <Expression>, unit: <Expression>, binSize: <Expression>, timezone: <tzExpression>, startOfWeek: <Expression> } }
フィールド | 必須または任意 | 説明 | ||||||
---|---|---|---|---|---|---|---|---|
必須 | ||||||||
必須 | 時間の単位。式として指定され、次のいずれかの文字列に解決される必要があります。
binSizeとunitは、 | |||||||
任意 | 数値の時間値。式として指定され、ゼロ以外の正の数値に解決される必要があります。デフォルトは 1 です。 binSizeとunitは、 | |||||||
任意 |
タイムゾーンが指定されていない場合、
| |||||||
任意 | 週の開始。 ユニットが startOfWeekは、大文字と小文字を区別しない文字列のいずれかに変換される必要がある式です。
|
動作
次の場合に
null
を返します。startOfWeekが欠落しているか、
null
に設定されている を除く入力フィールドのいずれか 1 つ:ユニットが
week
で、 startOfWeekが欠落しているか、null
に設定されている場合。
プロビジョニングされた グレゴリオ暦 を使用します 年1583 に先行する日付の場合。
夏時間は考慮されますが、 うるう秒は考慮されません。
binSize
およびunit
フィールド
binSizeとunitは、 $dateTrunc
計算で使用される期間を指定します。
以下に例を挙げます。
binSizeが
1
で、 unitがhour
の場合、期間は 1 時間です。 日付2021-03-20T11:30:05Z
の場合、$dateTrunc
は2021-03-20T11:00:00Z
を返します。binSizeが
2
で、 unitがhour
の場合、期間は 2 時間です。 日付2021-03-20T11:30:05Z
の場合、$dateTrunc
は2021-03-20T10:00:00Z
を返します。
計算の時間を指定された時間 単位
$dateTrunc
で binSize 期間に分割します。期間は、ユニットによって決定される基準日から始まります。ユニットが次の場合。
week
以外の string では、$dateTrunc
は2000-01-01T00:00:00.00Z
の参照日を使用します。 たとえば、 binSizeが10
で、 unitがyear
の場合、期間の例は次のようになります。2000-01-01T00:00:00.00Z
2010-01-01T00:00:00.00Z
2020-01-01T00:00:00.00Z
week
と等しい場合、$dateTrunc
は、2000-01-01
以上の週の最も近い最初の日に設定された参照日を使用します。 最初の日はstartOfWeekを使用して設定されます(デフォルトは日曜日)。
日付が含まれる期間の下限を返します。 境界はISODateとして返されます。 binSize フィールドが
1
の場合、 は返された$dateTrunc
ISODate の最下位部分( ユニット によって決定)を に設定し、0
ISODate の残りの部分を同じままにします。
ユニットが次の場合。
year
:$dateTrunc
は date の年の 1 月1のISODateを返します。quarter
:$dateTrunc
は、日付の暦上の四半期の最初の日の開始のISODateを返します。クォーターは次のとおりです。
1 月から 3 月
4 月から 6 月
7 月から 9 月
10 月から 12 月
month
:$dateTrunc
は date の最初の日の開始のISODateを返します。week
: は$dateTrunc
date の startOfWeek 日の開始の ISODate を返します。startOfWeekのデフォルトは日曜日です。day
:$dateTrunc
により、 date の開始時刻のISODateが返されます。hour
:$dateTrunc
は date の時間の開始のISODateを返します。minute
:$dateTrunc
は date の分の開始のISODateを返します。second
:$dateTrunc
は の日付の秒開始のISODateを返します。
unit
およびstartOfWeek
フィールド
ユニットが次の場合。
week
以外の string では、 startOfWeekは無視されます。week
と等しく、 startOfWeekは次のとおりです。指定:
$dateTrunc
はstartOfWeekを計算の最初の日として startOfWeek を使用します。省略:
$dateTrunc
は日曜日を計算の週の開始として使用します。
例
カリフォルニア州(CA
)とワシントン州(WA
)のケーキ販売を含む cakeSales
コレクションを作成します。
db.cakeSales.insertMany( [ { _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"), state: "CA", price: 13, quantity: 120 }, { _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"), state: "WA", price: 14, quantity: 140 }, { _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"), state: "CA", price: 12, quantity: 145 }, { _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"), state: "WA", price: 13, quantity: 104 }, { _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"), state: "CA", price: 41, quantity: 162 }, { _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"), state: "WA", price: 43, quantity: 134 } ] )
次の例では、 cakeSales
コレクションが使用されています。
パイプライン ステージでの注文日の切り捨て$project
この例では、 ステージで$dateTrunc
$project
を使用して、ケーキ販売orderDate
の値を 2 週間に切り捨てています。
db.cakeSales.aggregate( [ { $project: { _id: 1, orderDate: 1, truncatedOrderDate: { $dateTrunc: { date: "$orderDate", unit: "week", binSize: 2, timezone: "America/Los_Angeles", startOfWeek: "Monday" } } } } ] )
この例では、次のことが行われます。
$project
は、出力に_id
、orderDate
、およびtruncatedOrderDate
フィールドを含めます。$dateTrunc
は、 startOfWeek が に設定されているorderDate
2
week
タイムゾーン のAmerica/Los_Angeles
フィールドを binSize ユニット 期間を切り捨てます。Monday
この出力例では、切り捨てられた orderDate
が truncatedOrderDate
フィールドに表示されます。
[ { _id: 0, orderDate: ISODate("2020-05-18T14:10:30.000Z"), truncatedOrderDate: ISODate("2020-05-11T07:00:00.000Z") }, { _id: 1, orderDate: ISODate("2021-03-20T11:30:05.000Z"), truncatedOrderDate: ISODate("2021-03-15T07:00:00.000Z") }, { _id: 2, orderDate: ISODate("2021-01-11T06:31:15.000Z"), truncatedOrderDate: ISODate("2021-01-04T08:00:00.000Z") }, { _id: 3, orderDate: ISODate("2020-02-08T13:13:23.000Z"), truncatedOrderDate: ISODate("2020-02-03T08:00:00.000Z") }, { _id: 4, orderDate: ISODate("2019-05-18T16:09:01.000Z"), truncatedOrderDate: ISODate("2019-05-13T07:00:00.000Z") }, { _id: 5, orderDate: ISODate("2019-01-08T06:12:03.000Z"), truncatedOrderDate: ISODate("2019-01-07T08:00:00.000Z") } ]
パイプライン$group
ステージで注文日を切り捨てて数量の合計を取得する
この例では、 ステージで$dateTrunc
$group
を使用して、ケーキ販売のorderDate
値を 6 か月に切り捨てて、 値の合計を返します。quantity
db.cakeSales.aggregate( [ { $group: { _id: { truncatedOrderDate: { $dateTrunc: { date: "$orderDate", unit: "month", binSize: 6 } } }, sumQuantity: { $sum: "$quantity" } } } ] )
この例では、次のことが行われます。
$group
_id
フィールドをtruncatedOrderDate
フィールドに設定してcakeSales
ドキュメントをグループ化し、$sum
. を使用して各グループのquantity
値の合計を返します。
この出力例では、切り捨てられた orderDate
が truncatedOrderDate
フィールドに表示され、quantity
の合計が sumQuantity
フィールドに表示されます。
[ { _id: { truncatedOrderDate: ISODate("2020-01-01T00:00:00.000Z") }, sumQuantity: 224 }, { _id: { truncatedOrderDate: ISODate("2021-01-01T00:00:00.000Z") }, sumQuantity: 285 }, { _id: { truncatedOrderDate: ISODate("2019-01-01T00:00:00.000Z") }, sumQuantity: 296 } ]