MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Usando mongo com FLASK e python


Em primeiro lugar find_one retornará um único dicionário ou Nenhum se não houver nenhum elemento correspondente na coleção. Então eu acho que page[0] é equivalente a obter o valor do dicionário de páginas para a chave 0

Se os documentos retornados contiverem ObjectId como _id você não pode simplesmente usar jsonify porque, como ObjectId não é serializável JSON. Você pode usar algo assim:
jsonify({ 'page': make_public_page({k:v for k, v in page.items() if k != '_id'}))

ou você pode simplesmente remover _id chamando page.pop('_id')

Você também pode usar bson.json_util . Ele contém ferramentas para conversão entre BSON e JSON.
from flask import Response 
from bson import json_util

E, em seguida, substitua jsonify com algo parecido com isso:
return Response(
    json_util.dumps({'page' : make_public_page(page)}),
    mimetype='application/json'
)

Editar

Se você quiser uma maneira curta e suja de lidar com o problema, pode fazer assim:
from bson import json_util, ObjectId
import json

#Lets create some dummy document to prove it will work
page = {'foo': ObjectId(), 'bar': [ObjectId(), ObjectId()]}

#Dump loaded BSON to valid JSON string and reload it as dict
page_sanitized = json.loads(json_util.dumps(page))