python - 在 MongoDB 中嵌入与链接。何时嵌入以及何时链接?

标签 python django mongodb django-nonrel

我读过 this page但没有得到何时使用嵌入功能以及何时使用链接。我在 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)

我的问题是,如果我们进行嵌入,我们是否必须更新所有模型中的对象。就像我想更新“用户”的名称一样,我必须为模型运行更新:项目、团队、用户和在我的情况下,任务或链接会更好吗?

最佳答案

在您的示例中,是的,更改用户名意味着如果您使用嵌入,那么您必须通过额外的步骤更新所有其他文档。在您的情况下更合适的是链接(引用)。这涉及查询时的额外步骤,但由于您的特定“业务逻辑”,它会更好。

一般来说,如果一个给定的文档需要从多个不同的地方访问,那么将其作为引用而不是嵌入是有意义的。这同样适用于文档频繁更改的情况。

关于python - 在 MongoDB 中嵌入与链接。何时嵌入以及何时链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8239819/

相关文章:

java - 如何使用 Rest API 在 MongoDB 中使用 $in

mongodb - 从输入对象动态查询

c++ - python 找不到用 swig 编译的模块

python - opencv2 python 中可用的内置函数可查找图像之间的距离

java - 像 Java "instance-filtering"[RabbitMQ] 这样处理消息的最 Pythonic 方式是什么

php - 在 m1 macbook 中安装和设置 mongodb 的问题

python - 避免在多对多 rel SQLAlchemy 中检索要删除的对象

python - 类型错误:在 include().django2.2.2 的情况下, View 必须是可调用的或列表/元组

php - Django - 无法进行迁移,MySQL 5.7.19,Py 3.6.2

python - 使用 Django ModelForms 保存数据