MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Sérialisation de MongoDB find() return dans un tableau JSON non anonyme, à l'aide de PyMongo

Le problème ici est que vous avez déjà stringifié la réponse en tant que JSON avant de la transmettre dans une autre structure de données (maintenant en tant que chaîne) afin de la renvoyer en tant que JSON. Donc, vous faites essentiellement un double encodage et la "chaîne" est encodée.

Il vous suffit donc de transmettre les données une seule fois :

docs = mongodb.find(...query...)
return bson.json_util.dumps({ 'success': True, 'mycollectionKey': docs })

Donc sur une petite collection comme celle-ci :

{ "_id" : ObjectId("5343aeb5efbdb94c3647c8df"), "field" : "BBB" }
{ "_id" : ObjectId("5343aebbefbdb94c3647c8e0"), "field" : "aaa" }
{ "_id" : ObjectId("5343aebfefbdb94c3647c8e1"), "field" : "AAA" }

Vous obtenez un résultat comme celui-ci :

{   
    "mycollectionKey": [
        {"field": "BBB", "_id": {"$oid": "5343aeb5efbdb94c3647c8df"}}, 
        {"field": "aaa", "_id": {"$oid": "5343aebbefbdb94c3647c8e0"}}, 
        {"field": "AAA", "_id": {"$oid": "5343aebfefbdb94c3647c8e1"}}
    ], 
    "success": true
}

Si vous êtes vraiment préoccupé par l'ordre de ces deux clés, vous pouvez utiliser les "dumps" bson pour accéder à une chaîne, puis décoder avec le décodeur json standard afin d'obtenir un dict natif avec les objets Mongo désérialisés, puis mis en votre dict ordonné.

Mais vraiment, votre client ne devrait pas se soucier de l'ordre des clés et s'attendre à ces éléments racine.