sql >> Databasteknik >  >> NoSQL >> MongoDB

Serialisering av MongoDB find() återgår till en icke-anonym JSON-array med PyMongo

Problemet här är att du redan strängt svaret som JSON innan du skickade det till en annan datastruktur (nu som en sträng) för att returnera det som JSON. Så du gör i princip en dubbelkodning och "strängen" blir kodad.

Så skicka bara in data en gång:

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

Så på en liten samling som denna:

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

Du får ett resultat så här:

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

Om du verkligen är orolig för ordningen på dessa två nycklar kan du använda bson "dumps" för att gå till en sträng och sedan avkoda med standard json-avkodaren för att få en inbyggd dikt med Mongo-objekten deserialiserade, och sedan lägga in ytterligare i ditt beställda dikt.

Men egentligen borde din klient inte bry sig om nycklarnas ordning och bara förvänta sig dessa rotelement.




  1. MongoDB Aggregation:Dubbelsökning och sammanslagningssvar till respektive objekt

  2. MongoDB motsvarighet till SQL COUNT GROUP BY

  3. Mongoose.js-transaktioner

  4. NotUniqueError:Försökte spara dubbletter av unika nycklar