これが本当に単純かどうかはよくわかりませんが、このトピックについては何も見つかりません。しかし、通常の MongoEngine ライブラリを使用するか、Flask ベースの Web サイトに Flask-MongoEngine を使用しても、MongoEngine ドキュメントをそのままの JSON として返すことは可能でしょうか?
ありがとう!
これが本当に単純かどうかはよくわかりませんが、このトピックについては何も見つかりません。しかし、通常の MongoEngine ライブラリを使用するか、Flask ベースの Web サイトに 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))
正しい回避策はおそらく次のとおりです。
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()
前述の問題への対応として追加されたメソッドを使用します。