【问题标题】:MongoDB / PyMongo / Python (Time): Getting the Datetime as StringMongoDB / PyMongo / Python(时间):将日期时间作为字符串获取
【发布时间】:2019-10-31 15:32:37
【问题描述】:

我的文档中有一个具有以下结构的 MongoDB 数据库:

> "_id": {
>       "mandant": "a4da7117-2763-48df-b3a3-d50a0f6006fe",
>       "ersteller": "9bc79ce4-c23a-4c24-a857-80f94a341d39",
>       "sender": "9bc79ce4-c23a-4c24-a857-80f94a341d39",
>       "vorgang": "c08382ed-143f-46f7-8382-ed143f26f7b8",
>       "nachricht": "6c9d3386-001f-4809-9d33-86001fd80990"
>     },
>     "_class": "de.codecraft.amt.storage.model.XAmtshilfe",
>     "created": {
>       "$date": "2018-10-02T09:20:05.060Z"
>     },

当我查询时:

collection = db.find({}, {"_id": 0, "created": 1})

我得到了以下结果:

{'created': datetime.datetime(2018, 11, 30, 13, 40, 4, 879000)}

我怎样才能获得纯日期时间值,以便能够将其解析为其他形式的时间类型?

谢谢!

【问题讨论】:

  • 好吧...但是datetime.datetime(2018, 11, 30, 13, 40, 4, 879000) 是一个纯日期时间值(用你的话来说)

标签: python mongodb pymongo


【解决方案1】:

PyMongo 将时间戳转换为原生 datetime.datetime 结构。然后您可以使用.isoformat().strftime(<format>) 方法将其转换为字符串。

所以,继续你的例子

objects = db.find({}, {"_id": 0, "created": 1})
for obj in objects:
    dt = obj['created']
    time_str = dt.isoformat()
    # ...

【讨论】:

  • 嘿安德鲁,非常感谢你,工作完美。我一定会记得的! :)
【解决方案2】:

查询时也可以转成字符串:

pipe =
[  
   {  
      "$project":{  
         "_id":0,
         "created":{ "$dateToString":{"format":"%Y%m%dT%H%M", "date":"$created"}},
      }
   }
]
objects = db.aggregate(pipeline=pipe)

【讨论】:

    【解决方案3】:

    如果有人不仅要转换单个 datetime 值,还要转换文档中的所有值,下面的 json 编码器可能会有所帮助。

    import json
    import datetime
    
    class MongoDbEncoder(json.JSONEncoder):
        def default(self, obj):
            if isinstance(obj, datetime.datetime):
                return obj.astimezone().strftime("%Y-%m-%dT%H:%M:%S.%f%z")
            return json.JSONEncoder.default(self, obj)
    
    # usage
    json_document = json.dumps(result, cls=MongoDbEncoder)
    

    我收到了来自UUID conversion 的提示。

    【讨论】:

      猜你喜欢
      • 2020-05-26
      • 2017-06-19
      • 1970-01-01
      • 2016-08-13
      • 2015-09-17
      • 2015-03-24
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      相关资源
      最近更新 更多