5

map-reduce呼び出しの一部として、MongoDBコレクションに日付値を追加しています。

day = Date.UTC(this.time.getFullYear(), this.time.getMonth(), this.time.getDate());
emit({ user : this.user, day : day }, { count : 1 });

後でMongoシェルでこのコレクションをクエリすると、次のように表示されます。

{ "_id" : { "user" : "assaf", "day" : 1331769600000 }, "value" : { "count" : 15 } }
{ "_id" : { "user" : "assaf", "day" : 1331856000000 }, "value" : { "count" : 57 } }

どういうわけか、日付は整数のように見えます-タイムスタンプ表現だと思います。私がこれを行う場合:

PRIMARY> new Date(db.my_collection.find()[0]["_id"]["day"])

正しい日付を取り戻します:

ISODate("2012-03-19T00:00:00Z")

私の質問は、pymongoで同じことを行う方法です。上記のコレクションに対してクエリを実行すると、pymongoは、day値がタイムスタンプと同じ値を持つfloatタイプであるドキュメントを返します。

dict: {u'_id': {u'user': u'ariel', u'day': 1332115200000.0}, u'value': {u'count': 99.0}}

このタイムスタンプをPythonに変換するにはどうすればよいですdatetimeか?

4

2 に答える 2

6

エポック(1970年1月1日)からのミリ秒のように見えます:

>>> from __future__ import division
>>> dict = {u'_id': {u'user': u'ariel', u'day': 1332115200000.0}, u'value': {u'count': 99.0}}
>>> datetime.datetime.utcfromtimestamp(dict['_id']['day'] / 1000.0)
datetime.datetime(2012, 3, 19, 0, 0)
>>>

更新:最初のコメントから除算チェックを追加しました。

于 2012-09-08T17:00:16.563 に答える
0

質問のタイトルはコードと同じではありません。

Date.UTC()は、日付オブジェクトではなく整数を返します。整数を格納しているので、mongoDBはそれで問題ありません。後で、整数を取り出してDate()構造で使用すると、javascript環境ではこれで問題ありません。しかし、Pythonでは、整数のみが表示されます。以前に投稿された変換は良いもののようです。

于 2015-06-16T19:07:37.273 に答える