Мы пытаемся запустить код, который модифицирует документ, когда он загружается как часть обслуживания схемы. У нас есть документ, такой какКод запуска, когда 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 извлекается?
Не могли бы вы сделать процесс пакетной обработки при обновлении версии? и запустить его один раз против всех пользователей в системе? Как миграция? – dm03514
Это наш подход к откату, но у него есть некоторые проблемы, в основном есть серьезная проблема блокировки и согласованности. Либо ваше приложение должно дождаться его завершения, либо ваше приложение использует устаревшие объекты во время работы. Мы хотим сделать это таким образом, чтобы избежать этих проблем. – Cory