在MongoDB中嵌入Vs链接.何时嵌入和何时链接?

Ans*_*hul 5 python django mongodb django-nonrel

我读了这个页面,但没有得到何时使用嵌入功能以及何时使用链接.我在django中有一个项目,我正在使用MongoDB.在我的models.py文件中,我有以下模型:

class Projects(models.Model):
    projectName =models.CharField(max_length = 100,unique=True,db_index=True)
    projectManager = EmbeddedModelField('Users')

class Teams(models.Model):
    teamType = models.CharField(max_length =100)
    teamLeader = EmbeddedModelField('Users')
    teamProject = EmbeddedModelField('Projects')
    objects = MongoDBManager()

class Users(models.Model):
    name = models.CharField(max_length = 100,unique=True)
    designation = models.CharField(max_length =100 )
    teams = ListField(EmbeddedModelField('Teams'))



class Tasks(models.Model):
    title = models.CharField(max_length = 150)
    description = models.CharField(max_length=1000)
    priority = models.CharField(max_length=20)
    Status = models.CharField(max_length=20)
    assigned_to = EmbeddedModelField('Users')
    assigned_by = EmbeddedModelField('Users')
    child_tasks = ListField()
    parent_task = models.CharField(max_length = 150)
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我们进行嵌入,我们是否必须更新所有模型中的对象.如果我想更新"用户"的名称,我将不得不为模型运行更新:项目,团队,用户和任务或链接在我的情况下会更好吗?

Tyl*_*ock 3

首先,从概念上讲,将模型类命名为单一对象。

用户应该是用户,团队应该是团队......

将模型视为可以制造多个物体的模具。用户模型将产生用户并存储在名为用户的表中,其中每个文档/行都是一个用户对象。

现在,关于你的问题,hymloth 是完全正确的。使其成为对文档而不是嵌入文档的引用的方法是更改​​这些特定字段以引用用户集合中用户的 ID。这样,您只需存储要查找的 ID,而不是用户文档的副本。当您更改参考文档时,它所引用的所有位置也会发生更改。(典型的关系关联)

我在 Django-mongoDB 中也没有看到该字段,但也许您可以使用传统的 djangoforeignKey 字段来实现此目的。我不知道你是否可以混合搭配,所以尝试一下。

例如,您的 Teams 类将具有如下字段:

teamLeader = ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)

让我知道这是否有效。