sql >> Database >  >> NoSQL >> MongoDB

Serialiseren van MongoDB find() return in niet-anonieme JSON-array, met behulp van PyMongo

Het probleem hier is dat je het antwoord al als JSON hebt gesnared voordat je dat in een andere gegevensstructuur hebt doorgegeven (nu als een tekenreeks) om dat als JSON te retourneren. Dus je doet in feite een dubbele codering en de "string" wordt gecodeerd.

Geef de gegevens dus maar één keer door:

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

Dus op een kleine verzameling als deze:

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

Je krijgt een resultaat als dit:

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

Als je je echt zorgen maakt over de volgorde van die twee sleutels, dan kun je de bson "dumps" gebruiken om naar een string te gaan en vervolgens decoderen met de standaard json-decoder om een ​​native dict te krijgen met de Mongo-objecten gedeserialiseerd, en dan verder in te voeren uw bestelde dictaat.

Maar eigenlijk zou uw klant zich niets moeten aantrekken van de volgorde van de sleutels en alleen die root-elementen verwachten.




  1. Hoe spring boot app redis en spring boot session global redis te isoleren

  2. Mongodb - slechte zoekopdracht:BadValue onbekende operator op het hoogste niveau:$gte

  3. Is er een manier om het type veld te projecteren?

  4. Hoe kan ik een BsonDocument-object in een bestand schrijven en het opnieuw lezen met Java?