$dateTrunc (日付の切り捨て)
最終更新:2026-10-09
$dateTrunc (日付の切り捨て)
$dateTrunc は日付を指定した単位の開始位置に切り捨て、新しい日付を返します。タイムスタンプを時・日・月などのバケットに揃えて統計を取るのに最適です。unit には year、quarter、month、week、day、hour、minute、second を指定でき、binSize でバケットを広げられます(例: 3 時間単位のバケット)。startOfWeek は week のときだけ適用されます。timezone は切り捨てに使う暦を決定するため、タイムゾーンをまたぐ場合は明示的に設定してください。MongoDB 5.0 で導入されました。
| カテゴリ | 日付 |
|---|---|
| MongoDB バージョン | 5.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $dateTrunc: { date: <date-expression>, unit: <unit>, binSize: <number>, timezone: <timezone>, startOfWeek: <week-start> } }
⚙️ パラメータ
| date | 必須。切り捨てる日付。 |
|---|---|
| unit | 必須。切り捨て単位: year、quarter、month、week、day、hour、minute、second。 |
| binSize | 単位を広げる任意のバケットサイズ。 |
| timezone | 切り捨てに使用する任意のタイムゾーン。 |
| startOfWeek | 任意。unit が week の場合のみ適用。 |
戻り値:切り捨てられた日付(BSON Date)。date が null または欠落している場合は null。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $dateTrunc: 売上を時間単位で集計
db.sales.aggregate([
{ $group: {
_id: { $dateTrunc: { date: '$soldAt', unit: 'hour' } },
total: { $sum: '$amount' }
} }
])
出力:
{ "_id": ISODate("2026-09-25T08:00:00Z"), "total": 1250 }
{ "_id": ISODate("2026-09-25T09:00:00Z"), "total": 980 }
📌 注意事項
- 結果は常に単位の開始位置。day なら 00:00、hour ならその時の始まり
- binSize は minute、hour、day、week、month、quarter、year をサポート
- quarter は年を 4 つに分ける。結果は四半期の初日
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q$dateAdd との違いは?
A$dateTrunc は単位の開始位置に揃えるだけです。$dateAdd は時刻を移動させます。
QbinSize とは何ですか?
A単位をバケットに拡張します。unit を hour にした binSize 3 は 3 時間単位のバケットになります。
Q結果の時刻は?
Aday ならその日の 00:00、hour ならその時の始まりになります。