Problem polega na tym, że już sprecyzowałeś odpowiedź jako JSON przed przekazaniem jej do innej struktury danych (teraz jako ciąg), aby zwrócić ją jako JSON. Więc w zasadzie robisz podwójne kodowanie i "łańcuch" zostaje zakodowany.
Więc po prostu przekaż dane raz:
docs = mongodb.find(...query...)
return bson.json_util.dumps({ 'success': True, 'mycollectionKey': docs })
Tak więc na małej kolekcji takiej jak ta:
{ "_id" : ObjectId("5343aeb5efbdb94c3647c8df"), "field" : "BBB" }
{ "_id" : ObjectId("5343aebbefbdb94c3647c8e0"), "field" : "aaa" }
{ "_id" : ObjectId("5343aebfefbdb94c3647c8e1"), "field" : "AAA" }
Otrzymasz taki wynik:
{
"mycollectionKey": [
{"field": "BBB", "_id": {"$oid": "5343aeb5efbdb94c3647c8df"}},
{"field": "aaa", "_id": {"$oid": "5343aebbefbdb94c3647c8e0"}},
{"field": "AAA", "_id": {"$oid": "5343aebfefbdb94c3647c8e1"}}
],
"success": true
}
Jeśli naprawdę martwisz się o kolejność tych dwóch kluczy, możesz użyć „zrzutów” bson, aby przejść do ciągu, a następnie zdekodować za pomocą standardowego dekodera json, aby uzyskać natywny dykt z deserializowanymi obiektami Mongo, a następnie umieścić w Twój zamówiony dykt.
Ale tak naprawdę twój klient nie powinien dbać o kolejność kluczy i po prostu oczekiwać tych elementów głównych.