【问题标题】:Running code when mongoengine loads a documentmongoengine 加载文档时运行代码
【发布时间】: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


【解决方案1】:

看起来它很适合 post_init 信号,您可以在那里进行检查。

见:http://docs.mongoengine.org/guide/signals.html

【讨论】:

    猜你喜欢
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    相关资源
    最近更新 更多