Python MongoDB 日期时间 json

Python MongoDB datatime in json

我正在尝试将 mongo 数据作为 json 数据加载到我的 Django 应用程序中。

为此,我使用了这个示例数据:

mydict = {
"startsAt": {
    "time": {
        "date": datetime.datetime.today() - timedelta(days = 1) + timedelta(hours = i)
    },
    "valid": True
}

我正在我的 mongo 数据库中插入以上数据:

我正在尝试使用以下方法将此数据加载到 json:

def filterRegistration():
    sreialise_mongo = json_util.dumps(mycol.find(),indent=4, sort_keys=True, default=default)
    page_sanitized = json.loads(sreialise_mongo)
    return sreialise_mongo

在 Django 中,我使用以下方法加载此数据:

@api_view(['GET'])
def test(request):
    return Response({"message": filterRegistration()})

我得到了这样的 json 数据:

"startsAt": {
        "time": {
          "date": {
            "$date": 1612775312481
          }
        },
        "valid": true

我想要这样的数据:

   "startsAt": {
            "time": {
              "date": "2021-01-18T06:21:34.677Z"
            },
    "valid": true

我在类似问题中尝试了几种方法。但是我找不到解决方案。

有点麻烦,但你必须将 json 选项中的 DatetimeRepresentation 选项设置为 DatetimeRepresentation.ISO8601Documentation..

它仍然把它放在“$date”字段中,但您围绕它进行编码。

import pymongo
import datetime
from bson.json_util import dumps, JSONOptions, DatetimeRepresentation

client = pymongo.MongoClient()
db = client['mydatabase']
mycol = db.mycol

i = 1

mycol.insert_one({
    "startsAt": {
        "time": {
            "date": datetime.datetime.today() - datetime.timedelta(days=1) + datetime.timedelta(hours=i)
        },
        "valid": True
    }})


def filterRegistration():
    json_options = JSONOptions()
    json_options.datetime_representation = DatetimeRepresentation.ISO8601
    serialise_mongo = dumps(mycol.find(), indent=4, sort_keys=True, json_options=json_options)
    return serialise_mongo


print(filterRegistration())

给出:

[
    {
        "_id": {
            "$oid": "602133589ebd83ba93ec1583"
        },
        "startsAt": {
            "time": {
                "date": {
                    "$date": "2021-02-07T13:49:28.512Z"
                }
            },
            "valid": true
        }
    }
]