使用python在mongodb中保存日期

时间:2015-11-25 09:07:35

标签: python mongodb date datetime

我有一个字段'date',我从文档中获取。 字段date的值如下:"01.01.2014"

我将此字段保存到mongo数据库中,如下所示:

"date" : "01.01.2014",

如果我拆分这些参数:

year ='2014' 
month ='01' 
day ='01' 

我想将这个字段保存在类似datetime的正确类型中,那么如何使用这些参数存储它?

2 个答案:

答案 0 :(得分:0)

使用模块datetime

要保存在mongoDB中的日期对象是

myDateObject = datetime.datetime(year,month,day, 0 , 0)

使用myDateObject存储为mongoDB中日期键的值。

这里的年,月和日预计是整数。

在您的问题中,您还可以使用日期字段将其转换为python datetime。假设日期是mm.dd.yyyy格式,将日期转换为datetime对象的代码是,

>>> datetime.datetime.strptime(date,"%m.%d.%Y")
datetime.datetime(2014, 1, 1, 0, 0)

答案 1 :(得分:-1)

您基本上需要使用 Bulk API ,您可以在其中循环使用您的集合,以利用写入命令 Bulk API 允许执行批量更新操作,这些操作只是服务器顶部的抽象操作,可以轻松构建批量操作。

在批量更新中,您将以1000个批次的形式将操作发送到服务器,这样可以提供更好的性能,因为您不会将每个请求发送到服务器,每1000个请求只发送一次。 "批量API"实际上有点对你进行排序,但实际上你想要"管理"这要好一点,不要在你的应用程序中消耗太多内存。 在实际转化中,您需要 strptime() 方法将字符串转换为日期时间。以下(未经测试的)示例显示了这一概念:

from datetime import datetime

client = MongoClient(host, port)
db = client[database]
coll = db[collection]
bulk = coll.initialize_ordered_bulk_op()
counter = 0
date_format = "%d.%m.%Y"

for i, entry in enumerate(collection.find()):
    if entry.date:
        if type(entry.date) is not datetime:
            # process in bulk
            # convert date string value first
            time = datetime.strptime(entry.date, date_format)
            bulk.find({ '_id': entry._id }).update({ '$set': { 'date': time } })

            counter++

            if (counter % 1000 == 0):
                bulk.execute()
                bulk = coll.initialize_ordered_bulk_op()

if (counter % 1000 != 0):
    bulk.execute()