MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Serializacja MongoDB find() powraca do nieanonimowej tablicy JSON przy użyciu PyMongo

Problem polega na tym, że już sprecyzowałeś odpowiedź jako JSON przed przekazaniem jej do innej struktury danych (teraz jako ciąg), aby zwrócić ją jako JSON. Więc w zasadzie robisz podwójne kodowanie i "łańcuch" zostaje zakodowany.

Więc po prostu przekaż dane raz:

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

Tak więc na małej kolekcji takiej jak ta:

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

Otrzymasz taki wynik:

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

Jeśli naprawdę martwisz się o kolejność tych dwóch kluczy, możesz użyć „zrzutów” bson, aby przejść do ciągu, a następnie zdekodować za pomocą standardowego dekodera json, aby uzyskać natywny dykt z deserializowanymi obiektami Mongo, a następnie umieścić w Twój zamówiony dykt.

Ale tak naprawdę twój klient nie powinien dbać o kolejność kluczy i po prostu oczekiwać tych elementów głównych.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zapytanie Mongo zajmuje dużo czasu. Jak przyspieszyć?

  2. Funkcje operacji zbiorczego zapisu PyMongo z generatorami

  3. Jak wepchnąć nowe elementy do tablicy wewnątrz obiektu?

  4. Pobierz pojedynczą właściwość z dokumentu

  5. Jak używać PyMongo z planami Flask?