Python 将MongoEngine文档作为JSON返回
不太确定这是否真的很简单,但我真的找不到关于这个主题的任何东西。但是,无论是使用常规的MongoEngine库,还是在我基于Flask的网站上使用Flask MongoEngine,都可以将MongoEngine文档作为直接JSON返回吗Python 将MongoEngine文档作为JSON返回,python,flask,mongoengine,Python,Flask,Mongoengine,不太确定这是否真的很简单,但我真的找不到关于这个主题的任何东西。但是,无论是使用常规的MongoEngine库,还是在我基于Flask的网站上使用Flask MongoEngine,都可以将MongoEngine文档作为直接JSON返回吗 谢谢 在0.8中有帮助程序,请参见 同时,您必须直接使用pymongo的json_utils: from bson import json_util json_util.dumps(MyDoc._collection_obj.find(MyDoc.object
谢谢 在0.8中有帮助程序,请参见 同时,您必须直接使用pymongo的json_utils:
from bson import json_util
json_util.dumps(MyDoc._collection_obj.find(MyDoc.objects()._query))
正确的解决方法可能是:
from bson import json_util
objects = MyDoc.objects()
json_util.dumps(objects._collection_obj.find(objects._query))
当使用场投影或排序时,Ross和Jellyflower的变通方法不起作用 更一般的解决方法:
from bson import json_util
json = json_util.dumps(query._cursor)
更新:感谢
给_mongo()
方法使用建议
最后,我提出了以下解决方案:
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)
它使用
to_json()
方法,作为对上述内容的响应添加。Sweet。知道有没有办法通过pip安装mongoengine 0.8?看起来他们只有0.7.7:(还没有到0.8还不稳定,在开发过程中调用_json()会执行_mongo()(这会创建您想要的字典)然后序列化它,然后反序列化它,这是相当低效的。我认为更好的方法是使用它,因为它提供了一个有序的字典,然后用str值替换id。无论如何,感谢代码,因为它引导了我正确的方向!