2017-01-22 3 views
1

Also, ich habe zwei Dokumente in MongoDB modelliert in MongoEngine (klassische relationale Datenbank Beispiel)Migrating MongoDB Felder mit MongoEngine

class Person(Document) 
    name = StringField() 

class Address(Document) 
    person = ReferenceField(Person) 
    city = StringField() 

Eine Person kann mehrere Adressen haben. Ich mag diese Modelle migrieren, so dass diese das neue Schema wird:

class Address(Document) 
    city = StringField() 

class Person(Document) 
    name = StringField() 
    address = ListField(ReferenceField(Address)) 

Diese beide Einstellung und Entschärfen Felder auf den beiden Schemata beinhaltet und obendrein dafür sorgen, dass die alten Address Einträge werden in die richtigen migriert Person Adressliste.

In meinem Kopf würde es so etwas wie dies gehen:

  1. Set Feld Person
  2. Für jede Address fügen Sie es auf die richtige Person durch die ListField
  3. Unset Feld von Address
Anfügen

Dies scheint wie ein triviales Beispiel mit einer einfach genug Lösung, obwohl die IM Für mich ist die Integration in die Mongoengine seit einiger Zeit nicht mehr möglich. Durch Ändern der Klassen in Python stürzt der Server mit der Beschwerde fields cannot be resolved. Auch die Neuordnung der Klassen ist ein Problem, da die Klassenabhängigkeit voneinander abhängt. Darüber hinaus müssen Sammlungen in MongoDB aktualisiert werden.

Ich erinnere mich, dass SQLAlchemy gute Migration Unterstützung hat, aber ich habe nichts ähnliches für Flask + MongoEngine gefunden.

Wer kennt eine gute Lösung dafür?

Antwort

0

MongoDB haben keine Beziehung wie sqlalchemy so was ist so etwas wie dieses:

class Person(Document): 
    name = StringField() 
    address = ListField(DocumentField(Address)) 

city1 = Address(city='City1') 
session.save(ad) 
city2 = Address(city='City2') 
session.save(city2) 
person = Person(name='Ali', address=[city1, city2]) 
session.save(person) 
Verwandte Themen