如何使用Python PyMongo将MongoDB日期字符串转换为ISODate?

时间:2017-07-05 06:55:56

标签: python mongodb datetime pymongo

我正在尝试将格式为“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更新。

3 个答案:

答案 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 } } )