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