回答:
最良の方法は、BSONネイティブDateオブジェクトにマップするネイティブJavaScript 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タイムスタンプは秒単位で測定されます。JavaScript Dateオブジェクトは、Unixエポックからのミリ秒単位で測定されます。
389
and 240
はタイムスタンプのミリ秒です。Z
内の文字列の形式は、指定したタイムスタンプがUTCであることにMongoDBを伝えます。その後、それを読み返すと、アプリケーションによっておそらくローカルタイムゾーンに変換され、時間が変更されたように見えます。しかし、時間は同じです。異なるタイムゾーンの観点からのみ解釈されます。たとえば、同じ瞬間12:50:42Z
を13:50:42+01:00
表します。
21:56:03+01:00
CETに今、あなたが挿入しnew Date()
、その後、MongoDBはあります表すように20:56:03Z
。しかし、それを読み返して、ローカルタイムゾーン設定(CET)を使用してアプリケーションに表示すると、21:56:03
再度読み取られます。
したがって、挿入時間が必要な場合は、すでにそこにあります。
mongodbシェルにログインします
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
_id
ですか?
_id.getTimestamp()
ます。