Проблемът тук е, че вече сте стрингували отговора като JSON, преди да го предадете в друга структура от данни (сега като низ), за да го върнете като JSON. Така че вие основно правите двойно кодиране и "низът" се кодира.
Така че просто предайте данните веднъж:
docs = mongodb.find(...query...)
return bson.json_util.dumps({ 'success': True, 'mycollectionKey': docs })
Така че в малка колекция като тази:
{ "_id" : ObjectId("5343aeb5efbdb94c3647c8df"), "field" : "BBB" }
{ "_id" : ObjectId("5343aebbefbdb94c3647c8e0"), "field" : "aaa" }
{ "_id" : ObjectId("5343aebfefbdb94c3647c8e1"), "field" : "AAA" }
Получавате резултат като този:
{
"mycollectionKey": [
{"field": "BBB", "_id": {"$oid": "5343aeb5efbdb94c3647c8df"}},
{"field": "aaa", "_id": {"$oid": "5343aebbefbdb94c3647c8e0"}},
{"field": "AAA", "_id": {"$oid": "5343aebfefbdb94c3647c8e1"}}
],
"success": true
}
Ако наистина се притеснявате за реда на тези два ключа, тогава можете да използвате bson „изхвърлянията“, за да отидете до низ, след което да декодирате със стандартния json декодер, за да получите естествен dict с Mongo обекти, десериализирани, след което допълнително поставени в вашият поръчан dict.
Но всъщност вашият клиент не трябва да се интересува от реда на ключовете и просто да очаква тези основни елементи.