2012-09-08 29 views
5

tôi thêm một giá trị ngày tháng vào một bộ sưu tập MongoDB như là một phần của một cuộc gọi bản đồ giảm:Đưa một đối tượng Date vào MongoDB, nhận lại một phao khi truy vấn với pymongo

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

Khi sau, tôi truy vấn này bộ sưu tập trong vỏ Mongo tôi thấy:

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

Bằng cách nào đó ngày này trông giống như một số nguyên - tôi đoán đó là một số biểu diễn dấu thời gian. Nếu tôi làm điều này:

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

tôi lấy lại đúng ngày:

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

Câu hỏi của tôi là làm thế nào để làm điều tương tự trong pymongo. Nếu tôi chạy bất kỳ truy vấn trên các bộ sưu tập trên, pymongo trả lại tài liệu, trong đó giá trị day như một loại phao với giá trị tương tự như dấu thời gian:

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

Làm thế nào để chuyển timestamp này thành một Python datetime?

Trả lời

6

Hình như mili giây kể từ kỷ nguyên (01 tháng một năm 1970):

>>> 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) 
>>> 

UPDATE: Added kiểm tra bộ phận từ nhận xét đầu tiên.

+2

+1, nhưng bạn nên thay đổi '1000' thành' 1000.0' hoặc thêm 'từ __future__ bộ phận nhập' để tránh phân chia số nguyên, làm mất độ chính xác mili giây của dấu thời gian. – Cameron

+0

Tính năng này hoạt động. Bất kỳ ý tưởng tại sao các thông tin loại bị mất trên đường đi? –

+0

Ồ, chờ đợi, giá trị từ pymongo là một phao - vì vậy nhận xét trước của tôi không áp dụng. Tuy nhiên, tốt hơn để được rõ ràng hơn là dựa vào kiến ​​thức về điều đó, tôi giả sử. – Cameron

0

Tiêu đề của câu hỏi không giống như mã.

Date.UTC() trả về một số nguyên chứ không phải đối tượng ngày tháng. Bạn đang lưu trữ các số nguyên và mongoDB là tốt với điều đó. Sau đó, bạn kéo số nguyên ra và sử dụng nó trong cấu trúc Date() và trong môi trường javascript, tất cả đều ổn. Nhưng trong python, nó chỉ thấy số nguyên. Chuyển đổi được đăng trước đó có vẻ là một chuyển đổi tốt.

Các vấn đề liên quan