$toDate (日付への変換)
最終更新:2026-10-09
$toDate (日付への変換)
$toDate は値を BSON の Date に変換します。日付はそのまま通し、数値はミリ秒タイムスタンプとして扱い、ISO 8601 形式の文字列を解析します。代表的な用途は、ログの時刻文字列を日ごとのグループ化用の日付に変換したり、フロントエンドから受け取ったミリ秒タイムスタンプを標準化したりすることです。無効な文字列はエラーになるため、データが汚れている場合は onError 付きの $convert を優先します。null の入力は null を返します。$dateFromString と比べ、$toDate は構文が単純で ISO 形式を自動検出します。
| カテゴリ | 集合・条件・変換 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $toDate: <expression> }
⚙️ パラメータ
| 式 | 日付、数値のミリ秒タイムスタンプ、または ISO 文字列。 |
|---|
戻り値:Date。入力が null の場合は null
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $toDate: 時刻文字列を日付に解析
db.logs.aggregate([
{ $project: {
ts: { $toDate: '$timeStr' }
} }
])
出力:
{ '_id': 1, 'ts': { '$date': '2026-09-25T08:00:00Z' } }
📌 注意事項
- 数値はミリ秒タイムスタンプ。秒単位のタイムスタンプは先に 1000 倍する
- ISO 形式でない文字列(例: '2026/09/25')はエラー
- null の入力は null を返す
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Qどの文字列を解析できますか?
AISO 8601 形式です。例: '2026-09-25T08:00:00Z'。
Q秒単位のタイムスタンプは?
A先に 1000 倍します: { $multiply: ['$ts', 1000] } の後に変換します。
Q$dateFromString との違いは?
A$toDate は ISO 形式を自動検出します。$dateFromString は形式とタイムゾーンをカスタマイズできます。