MongoDBで日付(Date)をタイムスタンプに変換する方法を解説
MongoDBでは、aggregate()メソッドと集計パイプライン演算子を使うことで、保存されている日付(ISODate)をタイムスタンプ(ミリ秒単位の数値)に簡単に変換できます。この記事では、実際のコード例を通じて、その手順をわかりやすく解説します。
変換のポイント:$toLong演算子
日付からタイムスタンプへの変換には、集計パイプラインの$toLong演算子を使用します。$toLongは、日付型の値を「1970年1月1日00:00:00 UTCからの経過ミリ秒」を表す64ビット整数(NumberLong)に変換します。
サンプルコレクションの作成
まずは、ドキュメントを含むコレクションを作成しましょう。ここではinsertOne()メソッドを使って2件のドキュメントを挿入します。
> db.demo93.insertOne({"UserName":"Chris","ArrivalDate":new ISODate("2020-10-01")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2d4b6479799acab037af68")
}
> db.demo93.insertOne({"UserName":"David","ArrivalDate":new ISODate("2019-12-31")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2d4b7379799acab037af69")
}
登録したドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.demo93.find();
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e2d4b6479799acab037af68"), "UserName" : "Chris", "ArrivalDate" : ISODate("2020-10-01T00:00:00Z") }
{ "_id" : ObjectId("5e2d4b7379799acab037af69"), "UserName" : "David", "ArrivalDate" : ISODate("2019-12-31T00:00:00Z") }
現時点では、「ArrivalDate」フィールドにはISODate形式で日付が格納されています。
日付をタイムスタンプに変換するクエリ
それでは、本題である日付からタイムスタンプへの変換を行いましょう。以下のようにaggregate()メソッドを使用します。
> db.demo93.aggregate([
... { "$match": { "UserName": "Chris" }},
... { "$addFields": {
... "timestamp": { "$toLong": "$ArrivalDate" }
... }}
... ]);
このクエリの処理内容は次のとおりです。
- $match:条件に一致するドキュメントのみを抽出します。ここでは「UserName」が「Chris」のドキュメントを対象としています。
- $addFields:既存のドキュメントに新しいフィールドを追加します。ここでは「timestamp」というフィールドを追加しています。
- $toLong:「ArrivalDate」の日付値をミリ秒単位のタイムスタンプ(NumberLong)に変換します。
実行結果
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e2d4b6479799acab037af68"), "UserName" : "Chris", "ArrivalDate" : ISODate("2020-10-01T00:00:00Z"), "timestamp" : NumberLong("1601510400000") }
ご覧のとおり、元のドキュメントに加えて、「timestamp」フィールドに1601510400000という数値が追加されました。これは2020年10月1日00:00:00 UTCを表すミリ秒単位のタイムスタンプです。
まとめ
MongoDBで日付をタイムスタンプに変換するには、aggregate()メソッド内で$addFieldsと$toLongを組み合わせるのが基本のアプローチです。タイムスタンプ形式にすることで、数値としての比較やソート、他システムとの連携が容易になります。なお、元のドキュメント自体は変更されず、クエリ結果に新しいフィールドが追加される形になるため、既存データへの影響を心配せずに試すことができます。
-
Pythonで日付(date)を日時(datetime)に変換する方法
Pythonでは、datetimeモジュールのcombine()メソッドを使うことで、日付(date)と時刻(time)を組み合わせて、新しいdatetimeオブジェクトを作成できます。timeオブジェクトが手元にない場合は、datetime.min.time()を使って最小の時刻(つまり深夜0時=真夜中)を表すtimeオブjectを取得できます。方法1:datetime.combine() を使う以下の例では、今日の日付と最小の時刻(0時0分0秒)を組み合わせて、datetimeオブジェクトを生成しています。from datetime import date from datetime im
-
Unixエポックタイムスタンプとは?エポック時間を日付に変換する方法を徹底解説
コンピュータは、人間が使う自然言語(英語など)をそのまま理解できないことをご存知でしょうか?私たちが入力した命令はすべて、CPUが読み取って処理を実行する前に、バイナリコード(0と1だけで構成される2進数)へと変換されます。そして、処理結果も再び人間が読める形式へと翻訳されるのです。ここで一つ問題が生じます。「日付」は単純な0と1だけでは表現しきれない情報だという点です。この課題を解決するため、コンピュータ科学者たちは、あらゆる日付を「共通の基準点から経過した秒数」に変換する方式を採用しました。コンピュータに日付を与えると、内部では秒数へ変換され、時刻の起点となる最初の1秒から何秒経過したかが