web-dev-qa-db-ja.com

タイムスタンプをUNIX形式でISODateに表示する方法はありますか?

UNIXタイムスタンプを使用して日付をMongoDBに保存しましたが、クエリを実行したときに日付を取得するにはどうすればよいですか?タイムスタンプをISODate形式で表示する方法はありますか?

13
Adam Lee

バックグラウンド

  • nixtime 値は、エポック(1970年1月1日)以降のを表します。

  • JavaScript Date() は、エポック以降のミリ秒を表します。

  • MongoDBでは、 ISODate()Date()の便利なラッパーであり、mongoシェルのISO文字列から日付を作成できます。シェルでnew Date()を使用すると、ISODate()が返されます。

変換

unixtimeとISODate()の間で変換するには、UNIXタイムスタンプに1000を掛けて、この値をnew Date()コンストラクターに渡すことができます。

mongoシェルの簡単な例:

> db.mydata.insert({
    unixtime: 1362143511
})

> var doc = db.mydata.findOne();

// convert unixtime seconds to milliseconds and create JS date
> var date = new Date(doc.unixtime * 1000);

> date
ISODate("2013-03-01T13:11:51Z")
13
Stennie

Mongoコンソールでは、ドキュメントが画面に出力される前に、タイムスタンプからJavaScript Dateオブジェクトを作成できます。

_> db.stuff.find().forEach(function (doc) {
  doc["timestamp_field"] = new Date(doc["timestamp_field"])
  printjson(doc)
})
_

通常のfind()とは異なり、このコードには注意してください。結果はページングされませんが、一致するすべてのドキュメントが一時停止せずに印刷されます。

5
Theo

Mongodb 4.0が導入されました $toDate 集計なので、試してみることができます

db.collection.aggregate([
  { "$project": {
    "toDate": {
      "$toDate": "$unixTimestamp"
    }
  }}
])

試してみてください ここ

3
Ashh