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

📌 注意事項

さらなる実践ケースを近日公開予定。

📚 関連チュートリアル

❓ よくある質問

Q$dateAdd との違いは?
A$dateTrunc は単位の開始位置に揃えるだけです。$dateAdd は時刻を移動させます。
QbinSize とは何ですか?
A単位をバケットに拡張します。unit を hour にした binSize 3 は 3 時間単位のバケットになります。
Q結果の時刻は?
Aday ならその日の 00:00、hour ならその時の始まりになります。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%