我正在使用marshmallow-mongoengine和MongoEngine在Flask和Connexion之上构建一个 REST API来与MongoDB一起工作。
问题:如果我的输入数据包含额外的未知字段,则在使用 marshmallow-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
问题:如何在使用 marshmallow-mongoengine 加载数据时包含其他未知字段?我错过了什么?或者也许有更好的方法来使用 MongoDB。无论哪种方式,我都希望控制要(反)序列化的字段,并能够返回类似于“转储用户”输出中显示的 JSON,但包含该age
字段。