昨天我對MongoDB有一些奇怪的體驗。我正在使用twisted和txmongo - mongodb的異步驅動程序(類似於pymongo)。MongoDB日期和刪除對象
我有一個休息服務,它接收一些數據並把它放到mongodb。一個字段是以毫秒爲單位的13個數字的時間戳。
首先,將python中的毫秒時間戳轉換爲python datetime並不是一件簡單的方法。我結束了這樣的事情:
def date2ts(ts):
return int((time.mktime(ts.timetuple()) * 1000) + (ts.microsecond/1000))
def ts2date(ts):
return datetime.datetime.fromtimestamp(ts/1000) + datetime.timedelta(microseconds=(ts % 1000))
的問題是,當我將數據保存到MongoDB中,retreive日期時間回來,將其轉換回時間戳使用我的功能我沒有得到以毫秒爲單位的相同的結果。
我不明白爲什麼會發生這種情況。日期時間作爲ISODate對象保存在mongodb中。我試圖從shell中查詢它,並且在一秒或幾毫秒內確實存在差異。
問題1:有人知道爲什麼會發生這種情況嗎?
但是這還沒有結束。我決定不使用日期時間並直接保存時間戳。在此之前,我從集合中刪除了所有數據。我很驚訝,當我試圖保存相同的字段不是日期,但只要它,它被表示爲shell中的ISODate。當檢索時,在幾毫秒內仍然存在差異。
我試圖刪除收集和索引。當它沒有幫助我試圖刪除整個數據庫。當它沒有幫助我試圖刪除整個數據庫並重新啓動mongod。在此之後,我想它開始將它保存爲Long。
問題2:有人知道爲什麼會發生這種情況嗎?
謝謝!自1月1日,1970年在JavaScript(進而MongoDB的),該時間戳的Unix時間戳
我需要以毫秒爲單位進行存儲,以便通過時間戳字段進行精確查詢。我認爲最簡單的方法是將時間戳存儲很長時間。 –
「Python的時間戳記是以秒計算的」datetime有一個微秒字段,實際上可以存儲毫秒時間戳記。我想txmongo驅動程序做錯了方式。 –
找到這個評論它[pymongo驅動程序來源](https://github.com/mongodb/mongo-python-driver/blob/master/bson/son.py#L65):datetime.datetime實例將四捨五入到最近毫秒時保存 –