El problema aquí es que ya encadenaste la respuesta como JSON antes de pasarla a otra estructura de datos (ahora como una cadena) para devolverla como JSON. Así que básicamente estás haciendo una codificación doble y la "cadena" se codifica.
Así que solo pasa los datos una vez:
docs = mongodb.find(...query...)
return bson.json_util.dumps({ 'success': True, 'mycollectionKey': docs })
Entonces, en una pequeña colección como esta:
{ "_id" : ObjectId("5343aeb5efbdb94c3647c8df"), "field" : "BBB" }
{ "_id" : ObjectId("5343aebbefbdb94c3647c8e0"), "field" : "aaa" }
{ "_id" : ObjectId("5343aebfefbdb94c3647c8e1"), "field" : "AAA" }
Obtienes un resultado como este:
{
"mycollectionKey": [
{"field": "BBB", "_id": {"$oid": "5343aeb5efbdb94c3647c8df"}},
{"field": "aaa", "_id": {"$oid": "5343aebbefbdb94c3647c8e0"}},
{"field": "AAA", "_id": {"$oid": "5343aebfefbdb94c3647c8e1"}}
],
"success": true
}
Si está realmente preocupado por el orden de esas dos claves, puede usar los "volcados" de bson para ir a una cadena y luego decodificar con el decodificador json estándar para obtener un dictado nativo con los objetos Mongo deserializados, y luego ponerlos en tu dictado ordenado.
Pero realmente a su cliente no debería importarle el orden de las claves y solo esperar esos elementos raíz.