我的文档中有一个具有以下结构的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)}
如何获取纯日期时间值,以便能够将其解析为其他类型的时间类型?
谢谢!
答案 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得到了提示。