sql >> Base de Datos >  >> NoSQL >> MongoDB

Usando mongo con FLASK y python

En primer lugar find_one devolverá un solo diccionario o Ninguno si no hay ningún elemento coincidente en la colección. Así que creo que page[0] es equivalente a obtener el valor del diccionario de la página para la clave 0

Si los documentos devueltos contienen ObjectId como _id no puedes simplemente usar jsonify porque, como ObjectId no es JSON serializable. Puede usar algo como esto:

jsonify({ 'page': make_public_page({k:v for k, v in page.items() if k != '_id'}))

o simplemente puede eliminar _id llamando a page.pop('_id')

También puede usar bson.json_util . Contiene herramientas para la conversión entre BSON y JSON.

from flask import Response 
from bson import json_util

Y luego reemplace jsonify con algo similar a esto:

return Response(
    json_util.dumps({'page' : make_public_page(page)}),
    mimetype='application/json'
)

Editar

Si desea una forma breve y sucia de abordar el problema, puede hacerlo así:

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))