我有一个字段'date'
,我从文档中获取。
字段date
的值如下:"01.01.2014"
。
我将此字段保存到mongo数据库中,如下所示:
"date" : "01.01.2014",
如果我拆分这些参数:
year ='2014'
month ='01'
day ='01'
我想将这个字段保存在类似datetime的正确类型中,那么如何使用这些参数存储它?
答案 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()