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

Serialisering af MongoDB find() vender tilbage til et ikke-anonymt JSON-array ved hjælp af PyMongo

Problemet her er, at du allerede har strenget svaret som JSON, før du sendte det ind i en anden datastruktur (nu som en streng) for at returnere det som JSON. Så du laver grundlæggende en dobbeltkodning, og "strengen" bliver kodet.

Så indsend blot dataene én gang:

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

Så på en lille samling som denne:

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

Du får et resultat som dette:

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

Hvis du virkelig er bekymret over rækkefølgen af ​​disse to nøgler, kan du bruge bson "dumps" til at gå til en streng og derefter afkode med standard json-dekoderen for at få en indfødt diktat med Mongo-objekterne deserialiseret, og derefter sætte ind i din bestilte diktat.

Men din klient burde egentlig ikke være ligeglad med rækkefølgen af ​​nøglerne og bare forvente disse rodelementer.




  1. $lookup på ObjectId'er i et array

  2. $addToSet til et array, men det giver mig null

  3. Godkendelsesmekanismen SCRAM-SHA-1 understøttes ikke

  4. Mongoose (node.js-modul) forårsager højt CPU-forbrug