MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Serialisieren der MongoDB find()-Rückgabe in ein nicht anonymes JSON-Array unter Verwendung von PyMongo

Das Problem dabei ist, dass Sie die Antwort bereits als JSON gestringt haben, bevor Sie sie an eine andere Datenstruktur (jetzt als Zeichenfolge) übergeben, um sie als JSON zurückzugeben. Sie führen also im Grunde eine doppelte Codierung durch und die "Zeichenfolge" wird codiert.

Also nur einmal die Daten übergeben:

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

Also bei einer kleinen Sammlung wie dieser:

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

Sie erhalten ein Ergebnis wie dieses:

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

Wenn Sie sich wirklich Sorgen um die Reihenfolge dieser beiden Schlüssel machen, können Sie die bson "dumps" verwenden, um zu einer Zeichenfolge zu gehen, und dann mit dem Standard-json-Decoder decodieren, um ein natives Diktat mit den deserialisierten Mongo-Objekten zu erhalten, das dann weiter eingefügt wird Ihr bestelltes Diktat.

Aber eigentlich sollte sich Ihr Client nicht um die Reihenfolge der Schlüssel kümmern und nur diese Root-Elemente erwarten.