web-dev-qa-db-ja.com

mongodbに日付/時刻を保存する最良の方法

文字列、整数タイムスタンプ、mongo datetimeオブジェクトの使用を見てきました。

158
xrado

最良の方法は、ネイティブJavaScript Dateオブジェクト を保存することです。これは BSONネイティブDateオブジェクト にマップされます。

> db.test.insert({date: ISODate()})
> db.test.insert({date: new Date()})
> db.test.find()
{ "_id" : ObjectId("..."), "date" : ISODate("2014-02-10T10:50:42.389Z") }
{ "_id" : ObjectId("..."), "date" : ISODate("2014-02-10T10:50:57.240Z") }

ネイティブタイプは、便利なメソッドの全範囲をサポートしています。これは、たとえばmap-reduceジョブで使用できます。

必要に応じて、DateオブジェクトをUnixタイムスタンプとの間で簡単に変換できます。1)、それぞれgetTime()メソッドとDate(milliseconds)コンストラクターを使用します。

1) 厳密に言えば、Unixタイムスタンプはsecondsで測定されます。 JavaScriptのDateオブジェクトは、Unixエポック以降ミリ秒で測定されます。

179

挿入時刻を表す1つの日付スタンプが既に_idオブジェクトにあります

したがって、挿入時間が必要な場合は、すでに存在します。

mongodb Shellにログイン

ubuntu@ip-10-0-1-223:~$ mongo 10.0.1.223
MongoDB Shell version: 2.4.9
connecting to: 10.0.1.223/test

アイテムを挿入してデータベースを作成します

> db.penguins.insert({"penguin": "skipper"})
> db.penguins.insert({"penguin": "kowalski"})
> 

そのデータベースを現在のデータベースにします

> use penguins
switched to db penguins

行を取り戻す:

> db.penguins.find()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }
{ "_id" : ObjectId("5498da28f83a61f58ef6c6d6"), "penguin" : "kowalski" }

各行をyyyy-MM-dd HH:mm:ss形式で取得:

> db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds()) })
2014-12-23 3:4:41
2014-12-23 3:4:53

最後のワンライナーがあなたを混乱させる場合、ここでそれがどのように機能するかについてのチュートリアルがあります: https://stackoverflow.com/a/27613766/445131

Protip、MongoDBはWebスケールであるため、MongoDBは最適なDBです。 https://www.youtube.com/watch?v=b2F-DItXtZs

49
Eric Leschinski