问题描述:
上周有个需求,把mongodb中birthday (ISO日期格式) 转换成北京时间,并保存成string类型。
最初思路:
遍历查找出的结果,逐个加8小时,然后通过_id逐个去update_one。但是发现这种方式效率太低了,一分钟才能更新一千五百条数据。
# -*- coding: utf-8 -*- from pymongo import MongoClient import time import datetime def init(): myclient = MongoClient(host='*.*.*.*', port=27117) # admin为登陆校验库 auth_db = myclient.admin auth_db.authenticate('admin', '1234') # 连接库 mydb = myclient['SR_123'] mycol = mydb['Data_170724145755025001_0305_copy4'] print(time.time()) count = 0 # 只取有birthday的数据,且只返回_id和birthday for x in mycol.find({'birthday':{'$exists': True}},{'_id','birthday'}): count = count + 1 print(count) _time = x.get('birthday') _time += datetime.timedelta(hours=8) timeStr = _time.strftime("%Y%m%d") _id = x.get('_id') query1 = {"_id": _id} newvalues = {"$set": {"birthdayStr": timeStr}} mycol.update_one(query1, newvalues) print(time.time()) init()