Ma réponse en retour de MongoDB après avoir interrogé une fonction agrégée sur le document en utilisant Python, il retourne une réponse valide et je peux l'imprimer mais pas la retourner.
Erreur :
TypeError: ObjectId('51948e86c25f4b1d1c0d303c') is not JSON serializable
Imprimer :
{'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}
Mais quand j'essaie de revenir :
TypeError: ObjectId('51948e86c25f4b1d1c0d303c') is not JSON serializable
C'est un appel RESTfull :
@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
La base de données est bien connectée et la collection est là aussi. J'ai obtenu le résultat valide attendu mais quand j'essaie de retourner le résultat, cela me donne une erreur Json. Avez-vous une idée de la façon de reconvertir la réponse en JSON ? Merci