Devolver documentos de MongoEngine como JSON

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.