我是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)
但您的里程可能会有所不同。