MongoDB中数据的时间类型?

时间:2019-05-21 15:52:22

标签: python mongodb pymongo

我正在编写一个程序,以python将数据从MySQL传输到MongoDB。但是,我无法将时间数据类型传输到MongoDB: -MySQL端具有示例格式的时间数据字段:'18:59:32.521177'(“小时:分钟:秒:毫秒”) 我想问一下MongoDB中上述字段的对应数据类型是什么?如何使用python进行转换?

2 个答案:

答案 0 :(得分:1)

您可以将数据保留为字符串并进行对话:

  • 从字符串到日期:
your_datatime = datetime.strptime(your_str_datatime, "%Y-%m-%dT%H:%M:%SZ")
  • 从日期到str:
your_str_datatime = your_datatime.strftime("%Y-%m-%dT%H:%M:%SZ")

答案 1 :(得分:0)

mongodb中没有时间类型,只有日期时间。如果您真的只使用时间并且根本不关心日期部分,建议您将日期部分设置为1年1月1日(第1年)作为标记。在您的示例中,521177看起来像是微秒,而不是毫秒,因此它将立即进入python datetime对象:

#  Get your time object from MySQL and extract hour, mins, secs, and microseconds.
#  Then, construct a full datetime with the marker date:
d7 = datetime.datetime(1, 1, 1, 18, 59, 32, 521177)
db.foo.insert({"myDate": d7});

db.foo.find();
{ "_id" : ObjectId("5ce45553283c3282ad1cec34"), "myDate" : ISODate("0001-01-01T18:59:32.521Z") }

请注意,MongoDB datetime的时间部分仅精确到毫秒。如果您需要捕获Micros,则必须将其存储在对等字段中,例如

micros = 521177
d7 = datetime.datetime(1, 1, 1, 18, 59, 32, micros)
db.foo.insert({"myDate": d7, "micros": micros});

或者利用丰富的类型并创建一些日期和微观结构:

micros = 521177
d7 = datetime.datetime(1, 1, 1, 18, 59, 32, micros)
db.foo.insert({"myDate": {"d":d7, "micros": micros}});

这样,您可以轻松携带两个数据:

db.foo.findOne({}, {"myDate":1} );
{
    "_id" : ObjectId("5ce457df283c3282c43a79b7"),
    "myDate" : {
        "micros" : 521177,
        "d" : ISODate("0001-01-01T18:59:32.521Z")
    }
}

无论如何,您可以直接在从MongoDB获取的日期对象上使用python timedelta的{​​{1}}功能。使用1 Jan-1约定,日期差异将始终为零,从而为您带来时间差异-尽管仅精确到毫秒:

datetime