背景
最近需要从mongoDB中查询数据用于数据分析,一开始就用了pymongo后来发现使用起来很不方便,后面了解到有类似SQLAlchemy的ORM模块mongoengine能够操mongo
简单看了文档,就操练起来了,但是在模型的声明时以为会和SQLcalchemy一样不需要每个字段都严格匹配,结果查询出现了错误:
mongoengine.errors.FieldDoesNotExist: The fields "{\'fileSize\', \'guilds\', \'paused\', \'subcontractType\'}" do not exist on the document "TaskBatch"
解决
网上查找资料才知道增加参数strict=False即可解决:
class TaskBatch(Document):
"""
任务批次表
"""
_id = StringField(primary_key=True, required=True)
taskId = StringField(max_length=100)
taskName = StringField(max_length=50)
name = StringField(max_length=255)
createdDate = DateTimeField(default=datetime.now)
createdBy = StringField(max_length=255)
meta = {\'db_alias\': \'aie_prod\', # 根据别名自动使用对应客户端
\'collection\': \'TaskBatch\', # 设置默认集合即可直接连接到对应集合
\'strict\': False # 设置非严格校验字段则不需要吧所有字段都声明
}