不太确定这是否真的很简单,但我真的找不到任何关于这个话题的东西。但是,无论是使用常规的 MongoEngine 库,还是为我的基于 Flask 的网站使用 Flask-MongoEngine,都可以将 MongoEngine 文档作为直接 JSON 返回吗?
谢谢!
不太确定这是否真的很简单,但我真的找不到任何关于这个话题的东西。但是,无论是使用常规的 MongoEngine 库,还是为我的基于 Flask 的网站使用 Flask-MongoEngine,都可以将 MongoEngine 文档作为直接 JSON 返回吗?
谢谢!
在 0.8 中有帮助程序见https://github.com/MongoEngine/mongoengine/issues/1
同时你必须直接使用 pymongo 的 json_utils:
from bson import json_util
json_util.dumps(MyDoc._collection_obj.find(MyDoc.objects()._query))
当使用场投影或排序时,Ross 和 Jellyflower 的解决方法不起作用。
更一般的解决方法:
from bson import json_util
json = json_util.dumps(query._cursor)
正确的解决方法可能应该是:
from bson import json_util
objects = MyDoc.objects()
json_util.dumps(objects._collection_obj.find(objects._query))
更新:感谢Lo-Tan的to_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()
方法,作为对上述问题的回应而添加。