昨天我对 MongoDB 有一些奇怪的经历。我正在使用 twisted 和txmongo - mongodb 的异步驱动程序(类似于 pymongo)。
我有一个休息服务,它接收一些数据并将其放入 mongodb。一个字段是以毫秒为单位的时间戳,13 位。
首先,在 python 中将毫秒时间戳转换为 python 日期时间并非易事。我最终得到了这样的结果:
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 时,检索日期时间并使用我的函数将其转换回时间戳,我在毫秒内没有得到相同的结果。
我不明白为什么会这样。日期时间作为 ISODate 对象保存在 mongodb 中。我试图从 shell 查询它,确实有一秒或几毫秒的差异。
问题1:有人知道为什么会这样吗?
但这还没有结束。我决定不使用 datetime 并直接保存时间戳。在此之前,我从集合中删除了所有数据。当我尝试保存相同的字段而不是日期时,我感到非常惊讶,它在 shell 中表示为 ISODate。当检索到时,仍然存在几毫秒的差异。
我试图删除集合和索引。当它没有帮助时,我试图删除整个数据库。当它没有帮助时,我尝试删除整个数据库并重新启动 mongod。在此之后,我猜它开始将其保存为 Long。
问题2:有人知道为什么会这样吗?
谢谢!