sql >> Databáze >  >> NoSQL >> MongoDB

Serializace návratu MongoDB find() do neanonymního pole JSON pomocí PyMongo

Problém je v tom, že jste již odpověď strunizovali jako JSON, než ji předali do jiné datové struktury (nyní jako řetězec), abyste ji vrátili jako JSON. Takže v podstatě provádíte dvojité kódování a „řetězec“ se zakóduje.

Stačí tedy zadat data jednou:

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

Takže na malé sbírce, jako je tato:

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

Získáte výsledek takto:

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

Pokud se opravdu obáváte o pořadí těchto dvou klíčů, můžete použít „výpisy“ bson k přechodu na řetězec a poté dekódování pomocí standardního dekodéru json, abyste získali nativní dikt s deserializovanými objekty Mongo, které pak dále vložte do váš nařízený diktát.

Ale ve skutečnosti by se váš klient neměl starat o pořadí klíčů a měl by očekávat pouze kořenové prvky.




  1. Redis + ActionController::Živá vlákna neumírají

  2. MongoDB InvalidDocument:Nelze kódovat objekt

  3. mongoDB upsert na pole

  4. Zabraňte Mongoose ve vytváření vlastnosti _id pro položky pole vnořených dokumentů