Vấn đề ở đây là bạn đã xâu chuỗi phản hồi dưới dạng JSON trước khi chuyển nó vào một cấu trúc dữ liệu khác (bây giờ là một chuỗi) để trả về nó dưới dạng JSON. Vì vậy, về cơ bản bạn đang thực hiện mã hóa kép và "chuỗi" được mã hóa.
Vì vậy, chỉ cần chuyển dữ liệu một lần:
docs = mongodb.find(...query...)
return bson.json_util.dumps({ 'success': True, 'mycollectionKey': docs })
Vì vậy, trên một bộ sưu tập nhỏ như thế này:
{ "_id" : ObjectId("5343aeb5efbdb94c3647c8df"), "field" : "BBB" }
{ "_id" : ObjectId("5343aebbefbdb94c3647c8e0"), "field" : "aaa" }
{ "_id" : ObjectId("5343aebfefbdb94c3647c8e1"), "field" : "AAA" }
Bạn nhận được kết quả như thế này:
{
"mycollectionKey": [
{"field": "BBB", "_id": {"$oid": "5343aeb5efbdb94c3647c8df"}},
{"field": "aaa", "_id": {"$oid": "5343aebbefbdb94c3647c8e0"}},
{"field": "AAA", "_id": {"$oid": "5343aebfefbdb94c3647c8e1"}}
],
"success": true
}
Nếu bạn thực sự lo lắng về thứ tự của hai khóa đó thì bạn có thể sử dụng "kết xuất" bson để đi đến một chuỗi sau đó giải mã bằng bộ giải mã json tiêu chuẩn để có được một chính tả gốc với các đối tượng Mongo được deserialized, sau đó thêm vào mệnh lệnh đã đặt hàng của bạn.
Nhưng thực sự khách hàng của bạn không nên quan tâm đến thứ tự của các khóa và chỉ mong đợi những yếu tố gốc đó.