Masalahnya di sini adalah Anda sudah merangkai respons sebagai JSON sebelum meneruskannya ke struktur data lain (sekarang sebagai string) untuk mengembalikannya sebagai JSON. Jadi pada dasarnya Anda melakukan penyandian ganda dan "string" disandikan.
Jadi cukup masukkan data sekali saja:
docs = mongodb.find(...query...)
return bson.json_util.dumps({ 'success': True, 'mycollectionKey': docs })
Jadi pada koleksi kecil seperti ini:
{ "_id" : ObjectId("5343aeb5efbdb94c3647c8df"), "field" : "BBB" }
{ "_id" : ObjectId("5343aebbefbdb94c3647c8e0"), "field" : "aaa" }
{ "_id" : ObjectId("5343aebfefbdb94c3647c8e1"), "field" : "AAA" }
Anda mendapatkan hasil seperti ini:
{
"mycollectionKey": [
{"field": "BBB", "_id": {"$oid": "5343aeb5efbdb94c3647c8df"}},
{"field": "aaa", "_id": {"$oid": "5343aebbefbdb94c3647c8e0"}},
{"field": "AAA", "_id": {"$oid": "5343aebfefbdb94c3647c8e1"}}
],
"success": true
}
Jika Anda benar-benar khawatir tentang urutan kedua kunci itu maka Anda dapat menggunakan bson "dumps" untuk pergi ke string kemudian decode dengan dekoder json standar untuk mendapatkan dict asli dengan objek Mongo yang di-deserialized, kemudian dimasukkan lebih lanjut ke perintah Anda.
Tapi sebenarnya klien Anda seharusnya tidak peduli dengan urutan kunci dan hanya mengharapkan elemen root tersebut.