【发布时间】:2014-07-15 15:47:12
【问题描述】:
我们正在尝试运行在模式维护过程中加载文档时修改文档的代码。我们有一个文档,例如
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 时。(未来的升级将是 upgrade_2_to_3(),等等。)
我可以将检索文档时运行的代码放在这个 API 的什么位置?
【问题讨论】:
-
升级版本时可以做批处理吗?并针对系统中的所有用户运行一次?比如迁移?
-
这是我们的备用方法,但它有一些问题,主要是存在严重的阻塞与一致性问题。您的应用程序必须等待它完成,或者您的应用程序在运行时使用了过期的对象。我们希望通过这种方式来避免这些问题。
标签: pymongo mongoengine