No estoy muy seguro de si esto es realmente simple o no, pero realmente no puedo encontrar nada sobre el tema. Pero, ya sea utilizando la biblioteca MongoEngine regular, o incluso Flask-MongoEngine para mi sitio web basado en Flask, ¿sería posible devolver un documento de MongoEngine como JSON directo?
¡Gracias!
En 0.8 hay ayudantes ver https://github.com/MongoEngine/mongoengine/issues/1
mientras tanto, tienes que usar json_utils de pymongo directamente:
from bson import json_util json_util.dumps(MyDoc._collection_obj.find(MyDoc.objects()._query))
Las soluciones de Ross y Jellyflower no funcionan cuando se utiliza la proyección o el pedido de campo.
Solución más general:
from bson import json_util json = json_util.dumps(query._cursor)
La solución correcta probablemente debería ser:
from bson import json_util objects = MyDoc.objects() json_util.dumps(objects._collection_obj.find(objects._query))
Actualización : gracias a Lo-Tan por la sugerencia de uso del método to_mongo()
.
Finalmente se me ocurrió la siguiente solución:
from json import JSONEncoder from mongoengine.base import BaseDocument class MongoEncoder(JSONEncoder): def default(self, o): if isinstance(o, BaseDocument): data = o.to_mongo() # might not be present if EmbeddedDocument o_id = data.pop('_id', None) if o_id: data['id'] = str(o_id['$oid']) data.pop('_cls', None) return data else: return JSONEncoder.default(self, o) # consider `obj` to be MongoEngine object json_data = json.dumps(obj, cls=MongoEncoder)
Utiliza el método to_json()
, añadido como respuesta al problema mencionado anteriormente.