1

我不完全确定这个引擎是如何工作的,但让我设置一个场景。我有一个 Django-Mongo 项目,其中有一个模型类,例如:

class BaseModel(models.Model):
    created_at = models.DateTimeField(null=False, auto_now_add=True)
    modified_at = models.DateTimeField(null=False, auto_now=True)

我创建了一堆基础模型,项目中的一切都很可爱,我得到了很多数据。然后,稍后项目增长,我们需要扩展 BaseModel。突然变成:

class BaseModel(models.Model):
    created_at = models.DateTimeField(null=False, auto_now_add=True)
    modified_at = models.DateTimeField(null=False, auto_now=True)
    active = models.BooleanField(default=True)

所以我知道 mongo 将允许我在不接触数据库的情况下更改它,但是说我接下来要做的就是执行如下查询:

BaseModel.objects.filter(active=True)

我是否应该期望需要使用默认值但尚未访问的旧记录显示在此查询中?还是我需要为查询引擎做任何特定的事情来实现我正在寻找的值与默认值匹配?

4

1 回答 1

0

好的,经过反复试验,找到了答案。当 Django 执行查询时,它会查看 Mongo 在数据库中的内容并忽略任何默认设置。但是,当你已经得到一个对象时,Django 会将默认值放入内存中的对象中(而不是在 Mongo 记录中)。

这似乎有点恶心。这意味着,在我们可以查询重构的字段之前,我们需要做一次这样的事情:

for mod in BaseModel.objects.all():
    mod.save()

不用说,这可能是一个非常昂贵的查询。值得庆幸的是,它只需要运行一次,但仍然如此。

如果有更好的选择那就太好了。

于 2012-10-09T05:23:40.600 回答