2016-09-05 3 views
1

Werte Ich habe als bisher MapField benutze:Mongoengine: dynamische Felder mit EmbededDocuments als

class Game(EmbeddedDocument): 
    iscomplete = BooleanField() 
    score = IntField() 
    #other not dynamic fields 


class Progress(Document): 
    user = ReferenceField(User, dbref=True) 
    games = MapField(EmbeddedDocumentField(Game)) 
    created_at = DateTimeField() 
    updated_on = DateTimeField() 

Ich brauche zu konvertieren Spiele zu einem ReferenceField.

möchte ich Dokument mit dynamischen Felder/Schlüssel aber embeddedDocument als die Werte zu schaffen, so dass ich ein Dokument wie haben:

{ 
    "game1": { 
     "iscomplete": true, 
     "score": 23, 
     }, 
    "game2": { 
     "iscomplete": false, 
     "score": 10, 
     } 
} 

t hier sowieso ich es erreichen kann?

Antwort

1

Sie können achive dass mit dynamic document in mongengine:

DynamicDocument Dokumente als Dokument in der gleichen Art und Weise arbeiten, aber alle Daten/Attribute auf sie wird auch

So gespeichert werden, können Sie das Entfernen Spiele Feld, und fügen Sie später Ihre dynamischen Feld Spiele als, Game1, Game2, etc Felder, werden sie gespeichert werden.

class Game(EmbeddedDocument): 
    iscomplete = fields.BooleanField() 
    score = fields.IntField()  

class Progress(DynamicDocument): 
    user = ReferenceField(User, dbref=True) 
    created_at = DateTimeField() 
    updated_on = DateTimeField() 

    p = Progress() 
    p.game1 = Game(iscomplete=True, score=10) 
    p.game2 = Game(iscomplete=False, score=5) 
    p.save()