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

2024-10-05 14:21:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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

但我想确定新列的类型是ISODATE

目前,字符串格式为 “2019年3月31日下午7:00”

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

非常感谢你的回答

集合名称:instats\u tournames\u matches\u 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()

Tags: 字符串importparser类型dbdatemongodbconn
1条回答
网友
1楼 · 发布于 2024-10-05 14:21:28

如果您当前的数据都是您描述的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不是很熟悉,但我猜您希望的是循环浏览您的集合,并用上面的格式更新您的文档

大概是这样的(我还没有测试过)

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)

但你的里程数可能会有所不同

相关问题 更多 >