使用棉花糖-mongoengine加载数据时,如何包括其他未知字段?

时间:2019-03-06 11:55:38

标签: python flask mongoengine marshmallow connexion

我正在使用FlaskConnexionmarshmallow-mongoengine一起在MongoEngineMongoDB之上构建REST API。

问题::如果我的输入数据包含其他未知字段,则在使用棉花糖-mongoengine加载数据时,它们始终会从结果对象中排除;即使我的MongoEngine文档在扩展DynamicDocument时应允许它们使用。例如,

# Imports
from marshmallow_mongoengine import ModelSchema
from mongoengine.document import DynamicDocument
from mongoengine.fields import StringField, UUIDField
from pprint import pprint

# MongoEngine document
class User(DynamicDocument):
    id = UUIDField(required=True, binary=False, primary_key=True)
    first_name = StringField(required=True)
    last_name = StringField(required=True)

# Marshmallow schema with the Marshmallow-MongoEngine mapping
class UserSchema(ModelSchema):
    class Meta:
        model = User

# Usage
# Initialization
user_schema = UserSchema()
user_data = {
    "id": "77640cb5-75c9-4794-9581-5d7e2009cb78",
    "first_name": "John",
    "last_name": "Doe",
    "age": 50 # additional, unknown field
}

# Load user data
user = user_schema.load(data=user_data).data
pprint(user.to_mongo())
# {'_id': '77640cb5-75c9-4794-9581-5d7e2009cb78',
#  'first_name': 'John',
#  'last_name': 'Doe'}

# Dump user
data = user_schema.dump(obj=user).data
pprint(data)
# {'first_name': 'John',
#  'id': '77640cb5-75c9-4794-9581-5d7e2009cb78',
#  'last_name': 'Doe'}

从示例中可以看出,age字段已从加载的user对象中排除。

问题:在使用棉花糖mongoengine加载数据时如何包含其他未知字段?我想念什么?或者,也许有更好的方法来使用MongoDB。无论哪种方式,我都希望控制要(反)序列化的字段,并能够返回类似于“转储用户”输出中所示的JSON的JSON,但要包含age字段。

0 个答案:

没有答案