使用Python将列中的所有字符串转换为ISODate并复制到MongoDB

时间:2019-04-25 15:50:53

标签: python mongodb pymongo python-dateutil

我是MongoDB的新手,所以请帮助我解决我的问题。 我希望将名为match_date的列中的所有MongoDB字符串类型日期数据转换为ISODATE并将其粘贴到同一列中(我希望在开始时将其上传到其他列中,并在迭代完成后重命名。)

但是我要确保新列的类型为ISODATE。

当前,字符串格式为 “ 2019/3/31下午7:00:00”

我发现很难弄清楚它如何遍历整个集合并进行转换并完成此任务。

非常感谢您的回答。

集合名称:instats_tournament_matches_transition 列名:匹配日期

我尝试在MongoDB shell上执行此操作,但由于必须将其作为计划任务运行,因此无法正常工作。

我希望结果看起来像2019-04-25T15:31:35.000Z 并在Python中执行此任务

import datetime
import pymongo
import dateutil.parser

def getDatetimeFromISO(s):
    d = dateutil.parser.parse(s)
    return d

conn = pymongo.MongoClient()
db = conn.sampleDB
collection = db.test
post = {
    "user" : "test1",
    "date" : getDatetimeFromISO("2016-02-10T21:56:33.000Z")
}

collection.insert_one(post)
conn.close()

1 个答案:

答案 0 :(得分:0)

如果您当前所描述的数据全部以3/31/2019 7:00:00 PM的形式出现,则可以使用strptime()进行解析。

from datetime import datetime

data = [
  '3/31/2019 7:00:00 PM',
  '3/30/2019 8:35:20 AM',
  '2/1/2019 11:00:00 PM',
]

for x in data:
  print(datetime.strptime(x, '%m/%d/%Y %I:%M:%S %p').isoformat())
  # 2019-03-31T19:00:00
  # 2019-03-30T08:35:20
  # 2019-02-01T23:00:00

我对PyMongo和MongoDB并不是很熟悉,但是我想您想要的是遍历集合并使用新的match_date(?)格式更新文档,就像上面一样。

一个疯狂的猜测就像(我还没有测试过)

docs = collection.find({})

for doc in docs:
    doc['match_date'] = datetime.strptime(doc['match_date'], '%m/%d/%Y %I:%M:%S %p').isoformat()
    collection.replace_one({'_id': doc['_id']}, doc)

但是您的里程可能会有所不同。