Tanggapan saya kembali dari MongoDB setelah menanyakan fungsi agregat pada dokumen menggunakan Python, Ia mengembalikan tanggapan yang valid dan saya dapat mencetaknya tetapi tidak dapat mengembalikannya.
Kesalahan:
TypeError: ObjectId('51948e86c25f4b1d1c0d303c') is not JSON serializable
Mencetak:
{'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}
Tetapi ketika saya mencoba untuk kembali:
TypeError: ObjectId('51948e86c25f4b1d1c0d303c') is not JSON serializable
Ini adalah panggilan 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
db terhubung dengan baik dan koleksi ada di sana juga dan saya mendapatkan kembali hasil yang diharapkan yang valid tetapi ketika saya mencoba mengembalikannya memberi saya kesalahan Json. Ada ide bagaimana mengubah respon kembali menjadi JSON. Terima kasih