MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

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を組み合わせるのが基本のアプローチです。タイムスタンプ形式にすることで、数値としての比較やソート、他システムとの連携が容易になります。なお、元のドキュメント自体は変更されず、クエリ結果に新しいフィールドが追加される形になるため、既存データへの影響を心配せずに試すことができます。

  1. 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

  2. Unixエポックタイムスタンプとは?エポック時間を日付に変換する方法を徹底解説

    コンピュータは、人間が使う自然言語(英語など)をそのまま理解できないことをご存知でしょうか?私たちが入力した命令はすべて、CPUが読み取って処理を実行する前に、バイナリコード(0と1だけで構成される2進数)へと変換されます。そして、処理結果も再び人間が読める形式へと翻訳されるのです。ここで一つ問題が生じます。「日付」は単純な0と1だけでは表現しきれない情報だという点です。この課題を解決するため、コンピュータ科学者たちは、あらゆる日付を「共通の基準点から経過した秒数」に変換する方式を採用しました。コンピュータに日付を与えると、内部では秒数へ変換され、時刻の起点となる最初の1秒から何秒経過したかが