Het probleem hier is dat je het antwoord al als JSON hebt gesnared voordat je dat in een andere gegevensstructuur hebt doorgegeven (nu als een tekenreeks) om dat als JSON te retourneren. Dus je doet in feite een dubbele codering en de "string" wordt gecodeerd.
Geef de gegevens dus maar één keer door:
docs = mongodb.find(...query...)
return bson.json_util.dumps({ 'success': True, 'mycollectionKey': docs })
Dus op een kleine verzameling als deze:
{ "_id" : ObjectId("5343aeb5efbdb94c3647c8df"), "field" : "BBB" }
{ "_id" : ObjectId("5343aebbefbdb94c3647c8e0"), "field" : "aaa" }
{ "_id" : ObjectId("5343aebfefbdb94c3647c8e1"), "field" : "AAA" }
Je krijgt een resultaat als dit:
{
"mycollectionKey": [
{"field": "BBB", "_id": {"$oid": "5343aeb5efbdb94c3647c8df"}},
{"field": "aaa", "_id": {"$oid": "5343aebbefbdb94c3647c8e0"}},
{"field": "AAA", "_id": {"$oid": "5343aebfefbdb94c3647c8e1"}}
],
"success": true
}
Als je je echt zorgen maakt over de volgorde van die twee sleutels, dan kun je de bson "dumps" gebruiken om naar een string te gaan en vervolgens decoderen met de standaard json-decoder om een native dict te krijgen met de Mongo-objecten gedeserialiseerd, en dan verder in te voeren uw bestelde dictaat.
Maar eigenlijk zou uw klant zich niets moeten aantrekken van de volgorde van de sleutels en alleen die root-elementen verwachten.