Meine Antwort von MongoDB nach Abfrage einer aggregierten Funktion für ein Dokument mit Python. Es gibt eine gültige Antwort zurück und ich kann sie drucken, aber nicht zurückgeben.
Error:
TypeError: ObjectId('51948e86c25f4b1d1c0d303c') is not JSON serializable
Drucken:
{'result': [{'_id': ObjectId('51948e86c25f4b1d1c0d303c'), 'api_calls_with_key': 4, 'api_calls_per_day': 0.375, 'api_calls_total': 6, 'api_calls_without_key': 2}], 'ok': 1.0}
Aber wenn ich versuche zurückzukehren:
TypeError: ObjectId('51948e86c25f4b1d1c0d303c') is not JSON serializable
Es ist RESTfull Aufruf:
@appv1.route('/v1/analytics')
def get_api_analytics():
# get handle to collections in MongoDB
statistics = sldb.statistics
objectid = ObjectId("51948e86c25f4b1d1c0d303c")
analytics = statistics.aggregate([
{'$match': {'owner': objectid}},
{'$project': {'owner': "$owner",
'api_calls_with_key': {'$cond': [{'$eq': ["$apikey", None]}, 0, 1]},
'api_calls_without_key': {'$cond': [{'$ne': ["$apikey", None]}, 0, 1]}
}},
{'$group': {'_id': "$owner",
'api_calls_with_key': {'$sum': "$api_calls_with_key"},
'api_calls_without_key': {'$sum': "$api_calls_without_key"}
}},
{'$project': {'api_calls_with_key': "$api_calls_with_key",
'api_calls_without_key': "$api_calls_without_key",
'api_calls_total': {'$add': ["$api_calls_with_key", "$api_calls_without_key"]},
'api_calls_per_day': {'$divide': [{'$add': ["$api_calls_with_key", "$api_calls_without_key"]}, {'$dayOfMonth': datetime.now()}]},
}}
])
print(analytics)
return analytics
db ist gut verbunden und die Sammlung ist auch da und ich habe ein gültiges erwartetes Ergebnis zurückbekommen, aber wenn ich versuche, es zurückzugeben, gibt es mir einen Json-Fehler. Jede Idee, wie die Antwort wieder in JSON konvertiert werden kann. Vielen Dank