繁体   English   中英

将MongoEngine文档作为JSON返回

[英]Return MongoEngine Documents as JSON

不太确定这是否真的很简单,但我真的找不到任何关于这个主题的内容。 但是,使用常规MongoEngine库,甚至使用Flask-MongoEngine作为基于Flask的网站,是否可以将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-Tanto_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()方法,作为对上述问题的响应而添加。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM