我正在尝试将格式为“YYYY-MM-DD”的大量文档字符串转换为MongoDB中的ISODates,并已成功将其写入具有所需效果的控制台:
db.address.find({ "date" : { $type : 2 } } ).forEach(function(element){ element.date = ISODate(element.date); db.address.save(element);})
我试图在Python中做同样的事情:
client = MongoClient(my_mongodb_ip)
db = client.address
result = db.address.find( { "date" : { "$type" : 2 } } );
for r in result:
print(r['date'])
r["date"] = datetime.strptime(r["date"], "%Y-%m-%d")
print(r['date'])
db.address.update_one({"company": r['company']},
{"$set": {"date" : r['date']}})
我想提供这个:
"date": {
"$date": "2017-06-28T00:00:00.000Z"
},
我没有得到任何DB更新。
答案 0 :(得分:0)
尝试使用:
import dateutil.parser
dateutil.parser.parse(<your time String>)
答案 1 :(得分:0)
您可以使用python中的箭头模块实现此目标。您需要做的只是创建一个小函数,可以将您的日期作为参数并将其转换为ISO格式。
这是你可以做到的:
import arrow
def convert_to_ISO_Format(self, value):
date = arrow.get(value)
date = date.format("YYYY-MM-DDTHH:mm:ss")
date = date + "Z"
self.converted_date_iso = date
或者如果您知道州的地区并且想要相应地转换它,那么您可以这样做;
def convert_to_ISO_Region(self,value):
date = arrow.get(value)
date = date.to("Asia/Singapore")
date = date.format("YYYY-MM-DD HH:mm:ss")
date = date + "Z"
self.converted_date_iso = date
OR
如果您想将当前日期和时间转换为ISO,它就像下面的一个声明一样非常简单。
arrow.utcnow().datetime
我希望这对您的问题有所帮助。
答案 2 :(得分:0)
我弄清楚这里出了什么问题。无需导入箭头或解析器,datetime工作正常:
newest_date = datetime.strptime(r["date"], "%Y-%m-%d")
这将从我的&#34; date&#34;创建新的datetime对象。假设格式为YYYY-MM-DD,我的收藏中的项目。一旦我想到这一点,我也错误地将.isoformat()放到这个结尾再次创建一个字符串,不知道为什么我这样做。
删除了错误的isoformat()后,我现在可以运行:
db.address.update_one({"address": "1234", {"$set": {"date" : newest_date}})
地址将正确更新为类型9,即日期对象不是字符串。我检查了这个:
db.address.find({ "date" : { $type : 9 } } )