MongoDB / PyMongo / Python(时间):获取日期时间为字符串

时间:2018-12-03 14:43:31

标签: python mongodb pymongo

我的文档中有一个具有以下结构的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)}

如何获取纯日期时间值,以便能够将其解析为其他类型的时间类型?

谢谢!

3 个答案:

答案 0 :(得分: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()
    # ...

答案 1 :(得分:0)

您还可以在查询期间将其转换为字符串:

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

答案 2 :(得分:0)

如果某人不仅要转换单个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得到了提示。