MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Serializzazione di MongoDB find() ritorna in un array JSON non anonimo, usando PyMongo

Il problema qui è che hai già stringato la risposta come JSON prima di passarla in un'altra struttura dati (ora come stringa) per restituirla come JSON. Quindi stai praticamente eseguendo una doppia codifica e la "stringa" viene codificata.

Quindi passa i dati una volta sola:

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

Quindi su una piccola raccolta come questa:

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

Ottieni un risultato come questo:

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

Se sei davvero preoccupato per l'ordine di queste due chiavi, puoi usare bson "dumps" per andare a una stringa, quindi decodificare con il decoder json standard per ottenere un dict nativo con gli oggetti Mongo deserializzati, quindi inserire ulteriormente il tuo dict ordinato.

Ma in realtà il tuo cliente non dovrebbe preoccuparsi dell'ordine delle chiavi e aspettarsi solo quegli elementi radice.