$hour (時)
最終更新:2026-10-09
$hour (時)
$hour は日付の「時」部分(0〜23)を返します。時間単位のトラフィック分析やアラートウィンドウ、時間別レポートでよく使われます。戻り値は 24 時間表記の整数です。タイムゾーンの影響が最も大きい演算子で、UTC に 8 時間足すと北京時間になります。タイムゾーンをまたぐ分析では必ず timezone を明示しないと、すべてのバケットがずれます。既定は UTC です。
| カテゴリ | 日付 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $hour: { date: <date-expression>, timezone: <timezone> } }
⚙️ パラメータ
| date | 必須。日付式。 |
|---|---|
| timezone | 任意のタイムゾーン。既定は UTC。 |
戻り値:時(0〜23)。date が null の場合は null。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $hour: 時間ごとの訪問数(北京時間)
db.visits.aggregate([
{ $group: {
_id: { $hour: { date: '$visitAt', timezone: 'Asia/Shanghai' } },
pv: { $sum: 1 }
} }
])
出力:
{ "_id": 9, "pv": 2300 }
{ "_id": 10, "pv": 3100 }
📌 注意事項
- 24 時間表記、範囲は 0〜23
- タイムゾーンは時間を丸ごとずらす: UTC+8 の 8 時は UTC ではまだ 0 時
- 「何時か」のような業務上の意味付けには必ず timezone を渡す
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q範囲は?
A0〜23 の 24 時間表記です。
Q時間別データがずれるのはなぜ?
Aタイムゾーンが原因の可能性が高いです — 'Asia/Shanghai' のようなローカルゾーンを渡してください。
Q09 のような 2 桁の時間を出力できますか?
A$dateToString の %H プレースホルダを使います。