Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

$dateFromParts(集計)

項目一覧

  • 定義
  • 動作
$dateFromParts

日付の構成プロパティを指定して Date オブジェクトを構築し返します。

$dateFromParts式の構文は次のとおりです。

{
$dateFromParts : {
'year': <year>, 'month': <month>, 'day': <day>,
'hour': <hour>, 'minute': <minute>, 'second': <second>,
'millisecond': <ms>, 'timezone': <tzExpression>
}
}

ISO 週日 で構成日付フィールドを指定することもできます 次の構文を使用する形式。

{
$dateFromParts : {
'isoWeekYear': <year>, 'isoWeek': <week>, 'isoDayOfWeek': <day>,
'hour': <hour>, 'minute': <minute>, 'second': <second>,
'millisecond': <ms>, 'timezone': <tzExpression>
}
}

$dateFromPartsは、次のフィールドを持つドキュメントを取得します。

重要

$dateFromParts入力ドキュメントを作成するときに、暦上の日付と ISO 週の日付フィールドを組み合わせて使用することはできません。

フィールド
必須/オプション
説明

year

を使用していない場合は必須 isoWeekYear

暦年。 数値として評価される任意のを指定できます。

値の範囲: 1 - 9999

指定された数値がこの範囲を超えると、$dateFromParts はエラーになります。この値の下限は1 です。

isoWeekYear

を使用していない場合は必須 year

ISO 週日付年。 数値に評価される任意のを指定できます。

値の範囲: 1 - 9999

指定された数値がこの範囲を超えると、$dateFromParts はエラーになります。この値の下限は1 です。

month

任意。 yearとのみ使用できます。

月。 数値に評価される任意のを指定できます。

デフォルトは 1 です。

値の範囲: 1 - 12

指定された数値がこの範囲外の場合、$dateFromParts は日付の計算に差を組み込みます。例については、「 値の範囲 」を参照してください。

isoWeek

任意。 isoWeekYearとのみ使用できます。

年内の週。 数値に評価される任意のを指定できます。

デフォルトは 1 です。

値の範囲: 1 - 53

指定された数値がこの範囲外の場合、$dateFromParts は日付の計算に差を組み込みます。例については、「 値の範囲 」を参照してください。

day

任意。 yearとのみ使用できます。

日付。 数値に評価される任意のを指定できます。

デフォルトは 1 です。

値の範囲: 1 - 31

指定された数値がこの範囲外の場合、$dateFromParts は日付の計算に差を組み込みます。例については、「 値の範囲 」を参照してください。

isoDayOfWeek

任意。 isoWeekYearとのみ使用できます。

曜日( 月曜日1 - 日曜日7 )。 数値に評価される任意のを指定できます。

デフォルトは 1 です。

値の範囲: 1 - 7

指定された数値がこの範囲外の場合、$dateFromParts は日付の計算に差を組み込みます。例については、「 値の範囲 」を参照してください。

hour

任意

時間。 数値に評価される任意のを指定できます。

デフォルトは 0 です。

値の範囲: 0 - 23

指定された数値がこの範囲外の場合、$dateFromParts は日付の計算に差を組み込みます。例については、「 値の範囲 」を参照してください。

minute

任意

分。 数値に評価される任意のを指定できます。

デフォルトは 0 です。

値の範囲:0 -59 指定された数値がこの範囲外の場合、$dateFromParts は日付の計算にその差を組み込みます。例については、「 値の範囲 」を参照してください。

second

任意

2 つ。 数値に評価される任意のを指定できます。

デフォルトは 0 です。

値の範囲: 0 - 59

指定された数値がこの範囲外の場合、$dateFromParts は日付の計算に差を組み込みます。例については、「 値の範囲 」を参照してください。

millisecond

任意

ミリ秒。 数値に評価される任意のを指定できます。

デフォルトは 0 です。

値の範囲: 0 - 999

指定された数値がこの範囲外の場合、$dateFromParts は日付の計算に差を組み込みます。例については、「 値の範囲 」を参照してください。

timezone

任意

<timezone> は、値が次のいずれかの として評価される任意の 式string にすることができます。

  • Olson タイムゾーン識別子 、たとえば"Europe/London" や など、"America/New_York" または

  • 次の形式の UTC オフセット:

    • +/-[hh]:[mm]、例: "+04:45" 、または

    • +/-[hh][mm]、例: "-0530" 、または

    • +/-[hh], e.g. "+03".

式の詳細については、「式 」を参照してください。

yearisoWeekYearでサポートされている値の範囲は1-9999です。

yearisoWeekYeartimezone以外のフィールドに指定された値が有効範囲外の場合、 $dateFromPartsは他の日付部分との差を保持または減算して日付を計算します。

次の$dateFromParts式を考えてみましょう。 monthフィールド値は14で、これは12か月(または1年)の最大値よりも2か月大きいです。

{ $dateFromParts: { 'year' : 2017, 'month' : 14, 'day': 1, 'hour' : 12 } }

式では、 yearを 1 増やし、 monthを 2 に設定して日付を計算し、以下を返します。

ISODate("2018-02-01T12:00:00Z")

次の$dateFromParts 式を考慮します。ここで、month フィールド値は0 であり、これは1 月の最小値よりも1 か月です。

{ $dateFromParts: { 'year' : 2017, 'month' : 0, 'day': 1, 'hour' : 12 } }

式では、 yearを 1 減らし、 monthを 12 に設定して日付を計算すると次のように結果が返されます。

ISODate("2016-12-01T12:00:00Z")

<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
}

次の集計では、 $dateFromPartsを使用して、指定された入力フィールドから 3 つの日付オブジェクトを構築します。

db.sales.aggregate([
{
$project: {
date: {
$dateFromParts: {
'year' : 2017, 'month' : 2, 'day': 8, 'hour' : 12
}
},
date_iso: {
$dateFromParts: {
'isoWeekYear' : 2017, 'isoWeek' : 6, 'isoDayOfWeek' : 3, 'hour' : 12
}
},
date_timezone: {
$dateFromParts: {
'year' : 2016, 'month' : 12, 'day' : 31, 'hour' : 23,
'minute' : 46, 'second' : 12, 'timezone' : 'America/New_York'
}
}
}
}])

この操作では、次の結果を返します。

{
"_id" : 1,
"date" : ISODate("2017-02-08T12:00:00Z"),
"date_iso" : ISODate("2017-02-08T12:00:00Z"),
"date_timezone" : ISODate("2017-01-01T04:46:12Z")
}

戻る

$dateDiff

項目一覧