web-dev-qa-db-fra.com

mongoengine - Ignore les champs supplémentaires pour la validation du schéma

J'essaie d'interroger ma base de données. Certains enregistrements ont actuellement des champs supplémentaires qui ne sont pas inclus dans mon schéma de modèle (par erreur, mais je veux gérer ces cas). Lorsque j'essaie d'interroger la base de données et de transformer les enregistrements dans le schéma, j'obtiens le message d'erreur suivant:

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

En raison des champs supplémentaires dans la base de données qui diffèrent du schéma.

Existe-t-il un moyen d'ignorer cette validation de schéma pour les champs supplémentaires dans mongoengine?

26
Andrew

Pour ignorer cette erreur lorsque des champs supplémentaires sont chargés lors du chargement des données, définissez strict sur False dans votre méta dictionnaire.

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

Je pense que vous souhaitez utiliser un DynamicDocument au lieu d'un document lors de la définition de votre modèle, ce qui permettra d'ignorer les champs supplémentaires du schéma de base de données.

4
typemismatch

Je pense que vous voulez ignorer la validation du schéma, donc lorsque vous enregistrez votre document

document_name.save(validate=False)
1
geek4079

Vous pouvez prolonger monDynamicDocument.

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

Vous pouvez voir à partir du document. Une classe de document dynamique permet des schémas flexibles, extensibles et non contrôlés.

0
Edward Chiang