9

これが本当に単純かどうかはよくわかりませんが、このトピックについては何も見つかりません。しかし、通常の MongoEngine ライブラリを使用するか、Flask ベースの Web サイトに Flask-MongoEngine を使用しても、MongoEngine ドキュメントをそのままの JSON として返すことは可能でしょうか?

ありがとう!

4

4 に答える 4

7

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))
于 2012-12-03T20:43:30.720 に答える
2

正しい回避策はおそらく次のとおりです。

from bson import json_util
objects = MyDoc.objects()
json_util.dumps(objects._collection_obj.find(objects._query))
于 2013-04-08T06:43:38.470 に答える
1

更新:メソッドの使用方法の提案について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()前述の問題への対応として追加されたメソッドを使用します。

于 2015-11-02T13:00:48.290 に答える