2016-09-05 5 views
1

я использую MapField до сих пор, как:Mongoengine: динамические поля с EmbededDocuments, как ценности

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() 

Мне нужно преобразовать игры в ReferenceField.

Я хочу, чтобы создать документ с динамическими полями/ключей, но embeddedDocument как значения, так что я могу иметь документ, как:

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

Т здесь в любом случае я могу добиться этого?

ответ

1

Вы можете achive, что с помощью dynamic document in mongengine:

DynamicDocument документы работают точно так же, как документ, но все данные, /атрибуты установить на них будут также сохранены

Таким образом, вы удалите игровое поле, а затем добавьте свои динамические полевые игры, как, игры1, game2 и т. д., они будут сохранены.

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() 

 Смежные вопросы

  • Нет связанных вопросов^_^