【问题标题】:mongoengine - Ignore extra fields for schema validationmongoengine - 忽略模式验证的额外字段
【发布时间】:2015-06-12 06:04:57
【问题描述】:

我正在尝试查询我的数据库。某些记录当前具有未包含在我的模型架构中的额外字段(错误,但我想处理这些情况)。当我尝试查询数据库并将记录转换为架构时,出现以下错误:

FieldDoesNotExist
The field 'X' does not exist on the document 'Y'

因为数据库中的额外字段与架构不同。

有没有办法忽略 mongoengine 中额外字段的架构验证?

【问题讨论】:

    标签: mongodb database-schema mongoengine


    【解决方案1】:

    我想你想跳过架构验证,所以当你保存你的文档时

    document_name.save(validate=False)
    

    【讨论】:

    • 您好,感谢您的回复!这会起作用,但我仍然希望验证架构中的字段,我还想忽略记录中返回的任何额外字段。显而易见的方法是在我的所有字段上使用 only(),但这不是很好。
    【解决方案2】:

    我相信您在定义模型时希望使用 DynamicDocument 而不是 Document,这将允许忽略 db 架构中的额外字段。

    【讨论】:

    • 那么,@JFathi 和 DynamicDocument 的元数据中使用 strict 有什么区别?
    【解决方案3】:

    要在加载数据时忽略此错误,请在元字典中将 strict 设置为 False

    class User(Document):
        email = StringField(required=True, unique=True)
        password = StringField()
        meta = {'strict': False}
    
    【解决方案4】:

    您可以从 mon.DynamicDocument 扩展。

    class AF(mon.DynamicDocument):
      meta = {
        'collection': 'af'
      }
    user_id = mon.StringField(db_field='customer_user_id')
    

    你可以从文档中看到。动态文档类允许灵活、可扩展和不受控制的模式。

    【讨论】:

      【解决方案5】:

      只需使用 DynamicDocument 定义您的类

      class Y(DynamicDocument):
          pass
      

      添加任何你想要的属性

      o=Y()
      o.attr1="abc"
      

      保存 ;-) 没有错误

      o.save()
      

      【讨论】:

        猜你喜欢
        • 2015-06-22
        • 2019-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多