$dateFromParts (部品から日付を組み立て)
最終更新:2026-10-09
$dateFromParts (部品から日付を組み立て)
$dateFromParts は year、month、day、hour、minute、second、millisecond などの数値部品から日付を組み立てます。$dateToParts の逆関数です。カレンダー方式(year、month、day...)と ISO 8601 週方式(isoWeekYear、isoWeek、isoDayOfWeek)の 2 つのモードがあります。未指定のフィールドは最小値を取ります(month は 1、hour は 0 が既定)。保存された部品から日付を再構築したり、範囲の境界を組み立てたりするのに便利です。timezone は結果の日付のタイムゾーンを設定し、既定は UTC です。
| カテゴリ | 日付 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $dateFromParts: { year: <number>, month: <number>, day: <number>, hour: <number>, minute: <number>, second: <number>, millisecond: <number>, timezone: <timezone> } }
⚙️ パラメータ
| year | 必須。カレンダーモードでは year、ISO モードでは isoWeekYear。 |
|---|---|
| month / isoWeek | 月(既定 1)または ISO 週。どちらか一方のモードのフィールドのみ使用してください。 |
| day / isoDayOfWeek | 日(既定 1)または ISO 曜日。 |
| hour/minute/second/millisecond | 任意。既定は 0。 |
| timezone | 構築する日付の任意のタイムゾーン。 |
戻り値:構築された BSON Date。year が欠落している場合は null。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $dateFromParts: 部品からイベント時刻を再構築(北京時間)
db.events.aggregate([
{ $project: {
startedAt: { $dateFromParts: { year: '$y', month: '$m', day: '$d', timezone: 'Asia/Shanghai' } }
} }
])
出力:
{ "_id": 1, "startedAt": ISODate("2026-09-25T00:00:00Z") }
{ "_id": 2, "startedAt": ISODate("2026-10-01T00:00:00Z") }
📌 注意事項
- ISO 方式は isoWeekYear/isoWeek/isoDayOfWeek を使う。year/month/day とは混在させない
- 範囲外の値はエラーになる(例: month 13)。先に入力を検証する
- timezone は結果に影響する。既定は UTC
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Qyear だけで日付を組み立てられますか?
Aはい。month は 1、day は 1、時刻部品は 0 が既定になります。
Qカレンダー方式と ISO 方式を混在できますか?
Aいいえ。両者は排他的で、混在するとエラーになります。
Q範囲外の値はエラーになりますか?
Aはい。month 13 や day 32 などはエラーになります。渡す前に検証してください。