2014-07-11 3 views
0

Мы пытаемся запустить код, который модифицирует документ, когда он загружается как часть обслуживания схемы. У нас есть документ, такой какКод запуска, когда mongoengine загружает документ

from mongoengine import Document 
from mongoengine.fields import IntField, StringField 

class User(Document): 
    version = IntField(default=0) 
    name = StringField() 

Экземпляры пользователя создаются с версией = 1 и сохраняются.

Позже мы изменим этот класс следующим образом:

class User(Document): 
    version = IntField(default=0) 
    name = StringField(max_length=20) 

Некоторые версии 1 документы теперь должны быть усечены:

def upgrade_1_to_2(self): 
     self.name = self.name[:20] 

Мы хотим, чтобы автоматически запускать эту функцию каждый раз, когда пользователь извлекается из базы данных и только в случае версии == 1. (Будущие обновления были бы upgrade_2_to_3() и т. д.)

Где в этом API можно поместить код, который запускается при выполнении cument извлекается?

+0

Не могли бы вы сделать процесс пакетной обработки при обновлении версии? и запустить его один раз против всех пользователей в системе? Как миграция? – dm03514

+0

Это наш подход к откату, но у него есть некоторые проблемы, в основном есть серьезная проблема блокировки и согласованности. Либо ваше приложение должно дождаться его завершения, либо ваше приложение использует устаревшие объекты во время работы. Мы хотим сделать это таким образом, чтобы избежать этих проблем. – Cory

ответ

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