【问题标题】:PyMongo Transform DateFieldPyMongo 转换日期字段
【发布时间】:2021-01-20 06:11:44
【问题描述】:

我正在使用 pymongo 对 Premier Leage 数据库执行一些查询。

https://pkgstore.datahub.io/sports-data/english-premier-league/season-1819_json/data/175e7265560b9ab9102566c5dae7cbf3/season-1819_json.json

但是,我在处理Date 字段时遇到了一些麻烦,该字段采用dd/mm/yyyy 字符串格式,并且我找不到通过设置另一个字段来更新我的集合的方法,在该字段中该日期被转换为日期时间对象,可以订购。

db = client['PremierLeague']
col = db['2018-2019']

我试过了

col.update_many({},{"$set":{"DateTime":{datetime.strptime("$Date",'%d/%m/%Y')}}},upsert = True)

得到

ValueError: time data '$Date' does not match format '%d/%m/%Y'

我也试过

col.update_many({},{"$set":{"DateTime":{"$dateFromString":{ "date": "$Date", "format": '%d-%m-%Y'}} }},upsert = False)

获取WriteError

WriteError: The dollar ($) prefixed field '$dateFromString' in 'DateTime.$dateFromString' is not valid for storage., full error: {'index': 0, 'code': 52, 'errmsg': "The dollar ($) prefixed field '$dateFromString' in 'DateTime.$dateFromString' is not valid for storage."}

提前感谢您的关注。

【问题讨论】:

    标签: mongodb date pymongo


    【解决方案1】:

    这在 mongoshell 中是正确的:

    mongos> db.col.update({} ,[ { $set: { DateTime:{$dateFromString:{dateString:"$Date" ,format:"%d/%m/%Y"}}  }  }],{multi:true} )
    WriteResult({ "nMatched" : 380, "nUpserted" : 0, "nModified" : 379 })
    

    在python中:

    col.update_many({}, {"$set":{"DateTime":{$dateFromString:{dateString:"$Date",format:'%d/%m/%Y' }}}})
    

    【讨论】:

      【解决方案2】:

      我已经在 python 中使用 for 循环解决了这个问题,为集合中的每个文档设置了一个新字段

      for document in list(col.find()):
          dt = document['Date']
          ident = document['_id'] 
          d_obj = datetime.strptime(dt,'%d/%m/%Y').isoformat()
          col.update_one({"_id": ident}, {"$set":{ "FechaObj": d_obj}})
      

      非常感谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-26
        • 2017-10-01
        • 1970-01-01
        • 2019-04-28
        • 1970-01-01
        • 2021-05-26
        • 1970-01-01
        相关资源
        最近更新 更多