【问题标题】:Convert All Strings In Column To ISODate Using Python and Copy Into MongoDB使用 Python 将列中的所有字符串转换为 ISODate 并复制到 MongoDB
【发布时间】:2019-09-15 02:49:29
【问题描述】:

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

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

目前,字符串格式为 “2019 年 3 月 31 日晚上 7: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()

【问题讨论】:

  • 请发布您当前的代码以及您遇到的问题。首先,您可以查看datetime.strptime()
  • 我添加了我正在处理的代码。

标签: python mongodb pymongo python-dateutil


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2017-12-08
    • 2017-09-04
    • 2014-05-23
    • 2020-03-21
    相关资源
    最近更新 更多