sql >> Base de Datos >  >> NoSQL >> MongoDB

Serializar el retorno find() de MongoDB en una matriz JSON no anónima, usando PyMongo

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.