Pymongo mongoengine加载文档时运行代码

Pymongo mongoengine加载文档时运行代码,pymongo,mongoengine,Pymongo,Mongoengine,我们正在尝试运行代码,在作为模式维护的一部分加载文档时修改文档。我们有一份文件,例如 from mongoengine import Document from mongoengine.fields import IntField, StringField class User(Document): version = IntField(default=0) name = StringField() 用户的实例是用version=1创建并保存的 稍后,我们将对该类进行如下修改

我们正在尝试运行代码,在作为模式维护的一部分加载文档时修改文档。我们有一份文件,例如

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

class User(Document):
    version = IntField(default=0)
    name = StringField()
用户的实例是用version=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时。(未来的升级将是将_2_升级到_3(),依此类推。)


在这个API中,我可以将检索文档时运行的代码放在何处?

看起来它是
post\u init
信号的一个很好的候选者,您可以在那里进行检查


请参阅:

升级版本时,是否可以执行批处理?对系统中的所有用户运行一次?像迁移一样?这是我们的回退方法,但它有一些问题,主要是阻塞与一致性之间存在严重的问题。要么应用程序必须等待它完成,要么应用程序在工作时正在使用过时的对象。我们希望通过这种方式来避免这些问题。