Problemet her er, at du allerede har strenget svaret som JSON, før du sendte det ind i en anden datastruktur (nu som en streng) for at returnere det som JSON. Så du laver grundlæggende en dobbeltkodning, og "strengen" bliver kodet.
Så indsend blot dataene én gang:
docs = mongodb.find(...query...)
return bson.json_util.dumps({ 'success': True, 'mycollectionKey': docs })
Så på en lille samling som denne:
{ "_id" : ObjectId("5343aeb5efbdb94c3647c8df"), "field" : "BBB" }
{ "_id" : ObjectId("5343aebbefbdb94c3647c8e0"), "field" : "aaa" }
{ "_id" : ObjectId("5343aebfefbdb94c3647c8e1"), "field" : "AAA" }
Du får et resultat som dette:
{
"mycollectionKey": [
{"field": "BBB", "_id": {"$oid": "5343aeb5efbdb94c3647c8df"}},
{"field": "aaa", "_id": {"$oid": "5343aebbefbdb94c3647c8e0"}},
{"field": "AAA", "_id": {"$oid": "5343aebfefbdb94c3647c8e1"}}
],
"success": true
}
Hvis du virkelig er bekymret over rækkefølgen af disse to nøgler, kan du bruge bson "dumps" til at gå til en streng og derefter afkode med standard json-dekoderen for at få en indfødt diktat med Mongo-objekterne deserialiseret, og derefter sætte ind i din bestilte diktat.
Men din klient burde egentlig ikke være ligeglad med rækkefølgen af nøglerne og bare forvente disse rodelementer.