web-dev-qa-db-ja.com

mongoengine-スキーマ検証のために余分なフィールドを無視する

データベースを照会しようとしています。現在、一部のレコードには、モデルスキーマに含まれていない余分なフィールドがあります(エラーのため、これらのケースを処理したい)。 DBをクエリしてレコードをスキーマに変換しようとすると、次のエラーが発生します。

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

スキーマとは異なるデータベース内の追加フィールドがあるためです。

Mongoengineの追加フィールドに対するこのスキーマ検証を無視する方法はありますか?

29
Andrew

データの読み込み中に追加のフィールドがある場合にこのエラーを無視するには、メタディクショナリでstrictFalseに設定します。

class User(Document):
    email = StringField(required=True, unique=True)
    password = StringField()
    meta = {'strict': False}
35
JFathi

モデルを定義するときにDocumentの代わりにDynamicDocumentを使用すると、dbスキーマの余分なフィールドを無視できます。

5
typemismatch

スキーマ検証をスキップしたいので、ドキュメントを保存すると

document_name.save(validate=False)
1
geek4079

Mon.DynamicDocumentから拡張できます。

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

ドキュメントからご覧いただけます。ダイナミックドキュメントクラスは、柔軟で拡張可能で制御されていないスキーマを許可します。

0
Edward Chiang