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



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

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

目前,字符串格式为"2019/3/31 19:00:00

">

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

非常感谢您的回答。

集合名称:instats_tournament_matches_transition列名:match_date

我尝试在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()

如果您当前的数据都按照您所描述的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)

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

最新更新